2013-05-16 21 views
25

Tôi đang sử dụng một số nguyên tố có thể chỉnh sửa selectOneMenu để hiển thị một số giá trị. Nếu người dùng chọn một mục từ danh sách, vùng văn bản phải được cập nhật. Tuy nhiên, nếu người dùng gõ một cái gì đó trong selectOneMenu, văn bản không nên được cập nhật.selectOneMenu ajax events

Tôi nghĩ mình có thể làm việc này với sự kiện ajax. Tuy nhiên, tôi không biết tôi có thể sử dụng sự kiện nào ở đây. Tôi chỉ biết sự kiện valueChange. Có bất kỳ sự kiện nào khác, chẳng hạn như onSelect hoặc onKeyUp?

Đây là mã của tôi:

<p:selectOneMenu id="betreff" style="width: 470px !important;" 
      editable="true" value="#{post.aktNachricht.subject}"> 
      <p:ajax event="valueChange" update="msgtext" 
       listener="#{post.subjectSelectionChanged}" /> 
      <f:selectItems value="#{post.subjectList}" /> 
</p:selectOneMenu> 

<p:inputTextarea style="width:550px;" rows="15" id="msgtext" 
     value="#{post.aktNachricht.text}" /> 

Trả lời

53

Sự kiện ajax chính không được ghi lại nhiều, vì vậy trong hầu hết các trường hợp, bạn phải truy cập mã nguồn và tự kiểm tra.

p:selectOneMenu hỗ trợ thay đổi sự kiện:

<p:selectOneMenu ..> 
    <p:ajax event="change" update="msgtext" 
     listener="#{post.subjectSelectionChanged}" /> 
    <!--...--> 
</p:selectOneMenu> 

mà gây nên nghe với AjaxBehaviourEvent như là đối số trong chữ ký:

public void subjectSelectionChanged(final AjaxBehaviorEvent event) {...} 
+0

Bây giờ tên sự kiện là không cần thiết, chúng tôi chỉ có thể sử dụng

2

Bạn có thể kiểm tra xem giá trị của thành phần selectOneMenu của bạn thuộc về danh sách các đối tượng.

Cụ thể:

public void subjectSelectionChanged() { 
    // Cancel if subject is manually written 
    if (!subjectList.contains(aktNachricht.subject)) { return; } 
    // Write your code here in case the user selected (or wrote) an item of the list 
    // .... 
} 

Giả sử subjectList là một loại bộ sưu tập, như ArrayList. Tất nhiên ở đây mã của bạn sẽ chạy trong trường hợp người dùng viết một mục trong danh sách selectOneMenu của bạn.

2

Be carefull rằng trang này không chứa bất kỳ thành phần rỗng trong đó có "yêu cầu "thuộc tính là" true "trước khi thành phần selectOneMenu của bạn chạy.
Nếu bạn sử dụng một thành phần như

<p:inputText label="Nm:" id="id_name" value="#{ myHelper.name}" required="true"/> 

sau đó,

<p:selectOneMenu .....></p:selectOneMenu> 

và quên để điền vào các thành phần cần thiết, người nghe ajax của selectoneMenu có thể không được thực thi.

Các vấn đề liên quan