Po określeniu atrybutu process
znacznika p:ajax
detektor nie zostanie wykonany. Jeśli pominę atrybut process
, wówczas detektor zostanie wywołany zgodnie z oczekiwaniami.PrimeFaces Ajax Listener nie jest wykonywany, gdy atrybut procesu jest określony dla innego komponentu
Oto fragment widoku:
<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}" />
A Kontroler:
@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 załączeniu phaseListener
do widoku z ANY_PHASE
PhaseId, i oto co zauważyłem.
Kiedy określić process
atrybut, wartość inputToProcess wejście jest z powodzeniem ustawić regulator w fazie aktualizacji modelu (nie wyjątek). Następnie wykonywane są fazy Invoke Application
i Render Response
, ale nie jest wywoływany żaden detektor. Zauważyłem tylko, że pole wyboru nie jest ustawione na końcu. Ale nie ma błędów konwersji lub sprawdzania poprawności, ponieważ, jak już powiedziałem, są wykonywane fazy Update Model
i .
Jeśli pominąć atrybut process
, oto co widzę: słuchacz jest zwykle nazywane w fazie Invoke Application
(od immediate
jest fałszywe domyślnie), a następnie `Render Response jest wykonana. Pole wyboru zostało pomyślnie ustawione.
Czy istnieje jakieś wytłumaczenie tego rodzaju zachowania?
Co się stanie, jeśli dodasz '@ this' do' process'? Co się stanie, jeśli użyjesz standardowego pola wyboru JSF i komponentów ajax zamiast PrimeFaces? – BalusC
@ BalusC Jestem zmęczony licząc ile razy mi pomogłeś. Dzięki za tonę! Dodanie '@ this' do' process' zadziałało dla mnie. Czy jesteś w stanie wyjaśnić, dlaczego? Myślałem, że 'słuchacz' powinien zostać wywołany bez względu na to, czy' @ to' jest określone w 'procesie' czy nie. Czy to może być problem? Problem ze standardowym polem wyboru JSF i komponentów ajax polega na tym, że detektor jest wywoływany w fazie 'Process Validations', ale muszę najpierw zaktualizować model! Anywho, zaksięguj to jako odpowiedź, chętnie bym to zaakceptował. – jFrenetic
Problem został dodany na stronie: https://github.com/primefaces/primefaces/issues/509, ale nie chcą tego naprawić. Wejdź, komentuj i zagłosuj na to. – GreenieMeanie