Program nasłuchujący Ajax PrimeFaces nie jest wykonywany, gdy atrybut procesu jest określony dla innego komponentu
Kiedy określęprocess
atrybutp:ajax
tag, słuchacz nie jest wykonywany. Jeśli pominęprocess
atrybut, wtedy słuchacz jest wywoływany zgodnie z oczekiwaniami.
Oto fragment kodu widoku:
<code><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}" /> </code>
I kontroler:
<code>@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 } } </code>
Załączam aphaseListener
do widoku zANY_PHASE
PhaseIdi oto co zaobserwowałem.
Kiedy określęprocess
atrybut, wartośćinputToProcess wejście jest pomyślnie ustawione na sterownik podczas fazy aktualizacji modelu (nie występuje wyjątek). A późniejInvoke Application
iRender Response
fazy są wykonywane, ale nie jest wywoływany żaden słuchacz. Zauważyłem, że pole wyboru nie jest ustawione na końcu. Ale nie ma błędów konwersji ani walidacji, ponieważ, jak powiedziałemUpdate Model
iInvoke Application
fazy są wykonywane.
Jeśli pominęprocess
atrybut, oto co widzę: słuchacz jest zwykle wywoływany podczasInvoke Application
faza (odimmediate
domyślnie jest fałszywe), a następnie wykonywana jest „Odpowiedź renderująca”. Pole wyboru zostało pomyślnie ustawione.
Czy istnieje jakieś wyjaśnienie tego rodzaju zachowania?