Khi tôi chỉ định thuộc tính process
của thẻ p:ajax
, trình nghe không được thực thi. Nếu tôi bỏ qua thuộc tính process
thì người nghe sẽ được gọi như mong đợi.Trình lắng nghe Ajax của PrimeFaces không được thực hiện khi thuộc tính quy trình được chỉ định cho một thành phần khác
Dưới đây là đoạn xem:
<p:messages id="messages" />
<h:inputText id="inputToProcess" value="#{controller.inputToProcess}" />
<p:selectBooleanCheckbox id="testCheckbox" >
<p:ajax event="change" process="inputToProcess"
update="messages @this inputToUpdate"
listener="#{controller.processChecked}" />
</p:selectBooleanCheckbox>
<h:inputText id="inputToUpdate" value="#{controller.inputToUpdate}" />
Và Bộ điều khiển:
@javax.faces.bean.ManagedBean
@javax.faces.bean.ViewScoped
public class Controller implements Serializable {
private String inputToProcess;
private String inputToUpdate;
//getters and setters
public void processChecked(javax.faces.AjaxBehaviorEvent e) {
// doing some stuff here
}
}
I kèm theo một phaseListener
đến một cái nhìn với ANY_PHASE
PhaseId, và đây là những gì tôi quan sát.
Khi tôi chỉ định thuộc tính process
, giá trị của đầu vào inputToProcess được đặt thành công cho bộ điều khiển trong giai đoạn Mô hình cập nhật (không xảy ra ngoại lệ). Sau đó, các giai đoạn Invoke Application
và Render Response
được thực thi, nhưng không có người nghe nào được gọi. Một điều tôi nhận thấy là hộp kiểm không được đặt ở cuối. Tuy nhiên, không có lỗi chuyển đổi hoặc xác thực, bởi vì như tôi đã nói các giai đoạn Update Model
và Invoke Application
được thực thi.
Nếu tôi bỏ qua thuộc tính process
, dưới đây là những gì tôi thấy: người nghe thường được gọi trong giai đoạn Invoke Application
(vì immediate
là false theo mặc định), và sau đó `Render Response được thực thi. Hộp kiểm được đặt thành công.
Có giải thích nào cho loại hành vi này không?
Nếu bạn thêm '@ this' vào' process' thì sao? Nếu bạn sử dụng hộp kiểm JSF tiêu chuẩn và các thành phần ajax thay vì các thành phần PrimeFaces thì sao? – BalusC
@BalusC Tôi mệt mỏi đếm số lần bạn đã giúp tôi. Cảm ơn một tấn! Thêm '@ this' vào' process' đã làm việc cho tôi. Bạn có thể giải thích tại sao? Tôi nghĩ rằng 'listener' nên được kích hoạt không có vấn đề, cho dù' @ this' được xác định trong 'process' hay không. Đây có phải là một vấn đề không? Vấn đề với hộp kiểm JSF tiêu chuẩn và các thành phần ajax, là người nghe được gọi trong giai đoạn 'Process Validations', nhưng tôi cần phải cập nhật mô hình đầu tiên! Anywho, đăng bài này như một câu trả lời, tôi sẽ sẵn sàng chấp nhận nó. – jFrenetic
Sự cố đã được thêm tại: https://github.com/primefaces/primefaces/issues/509, nhưng họ không muốn sửa lỗi đó. Vui lòng vào và bình luận và bỏ phiếu cho nó. – GreenieMeanie