Quando si specifica l'attributo process
del tag p:ajax
, il listener non viene eseguito. Se ometto l'attributo process
, il listener viene chiamato come previsto.PrimeFaces Ajax Listener non eseguito quando l'attributo di processo è specificato per un componente diverso
Ecco il frammento di vista:
<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}" />
e regolatore:
@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
}
}
Ho attaccato un phaseListener
ad una vista con ANY_PHASE
PhaseId, e qui è quello che ho osservato.
Quando specifico process
attributo, il valore del ingresso inputToProcess è impostato con successo al controller durante la fase di aggiornamento del modello (non si verifica alcuna eccezione). Quindi vengono eseguite le fasi e Render Response
, ma nessun listener viene chiamato. Una cosa che ho notato è che la casella di controllo non è impostata alla fine. Ma non ci sono errori di conversione o di convalida, perché come ho detto le fasi Update Model
e vengono eseguite.
Se tralascio attributo process
, qui è quello che vedo: l'ascoltatore è normalmente chiamato durante la fase di Invoke Application
(dal immediate
è falso di default), e poi `Render Response viene eseguita. La casella di controllo è stata impostata correttamente.
C'è qualche spiegazione per questo tipo di comportamento?
Cosa succede se si aggiunge '@ questo' a' processo'? Cosa succede se si utilizza la casella di controllo JSF standard e componenti ajax invece di quelli PrimeFaces? – BalusC
@BalusC Sono stanco contando quante volte mi avete aiutato. Grazie mille! L'aggiunta di '@ this' a' process' ha funzionato per me. Sei in grado di spiegare perché? Ho pensato che il 'listener' dovrebbe essere attivato, non importa, se' @ this' è specificato in 'process' o no. Questo potrebbe essere un problema? Il problema con la casella di controllo JSF standard e i componenti ajax è che il listener viene richiamato durante la fase di 'Process Validations', ma prima devo aggiornare il modello! Chiunque, posta questa come risposta, lo accetterei volentieri. – jFrenetic
È stato aggiunto un problema a: https://github.com/primefaces/primefaces/issues/509, ma purtroppo non lo vogliono risolvere. Per favore, entra e commenta e vota. – GreenieMeanie