Cuando especifico el atributo process
de la etiqueta p:ajax
, el detector no se ejecuta. Si omito el atributo process
, se llama al oyente como se esperaba.PrimeFaces Ajax Listener no se ejecuta cuando el atributo de proceso se especifica para un componente diferente
Aquí es la vista de fragmentos:
<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}" />
y regulador:
@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
}
}
Os adjunto un phaseListener
a una vista con ANY_PHASE
PhaseId, y aquí es lo que he observado.
cuando especifico process
atributo, el valor de la entrada inputToProcess se establece con éxito para el controlador durante la fase de actualización de modelo (no se produce ninguna excepción). A continuación, se ejecutan las fases Invoke Application
y Render Response
, pero no se llama a ningún detector. Una cosa que noté es que la casilla de verificación no está configurada al final. Pero no hay errores de conversión o validación, porque como dije, se ejecutan las fases Update Model
y Invoke Application
.
Si omito process
atributo, esto es lo que veo: el oyente se llama normalmente durante la fase de Invoke Application
(ya immediate
es false por defecto), y luego `render se ejecuta respuesta. La casilla de verificación se configuró correctamente.
¿Hay alguna explicación para este tipo de comportamiento?
¿Qué sucede si agrega '@ this' a' process'? ¿Qué sucede si usa checkbox JSF estándar y componentes ajax en lugar de los de PrimeFaces? – BalusC
@BalusC Estoy cansado de contar cuántas veces me has ayudado. ¡Gracias una tonelada! Agregar '@ esto' a' proceso' funcionó para mí. ¿Eres capaz de explicar por qué? Pensé que el 'listener' debería activarse sin importar si' @ this' está especificado en 'process' o no. ¿Podría ser esto un problema? El problema con el checkbox JSF estándar y los componentes ajax, es que el oyente se invoca durante la fase 'Validaciones del proceso', ¡pero primero tengo que actualizar el modelo! Anywho, publica esto como respuesta, lo acepto con gusto. – jFrenetic
Se agregó un problema en: https://github.com/primefaces/primefaces/issues/509, pero lamentablemente no quieren solucionarlo. Por favor, entra y comenta y vota sobre ello. – GreenieMeanie