vertical type prime one faces event jsf jsf-2 primefaces selectoneradio

jsf - type - Primefaces selectOneRadio ajax



select one radio primefaces vertical (1)

Intento mostrar los mensajes de validación cada vez que el usuario hace clic en un botón de radio.

Esto solo funciona cuando hago clic en el botón de enviar, pero no cuando hago clic en el botón de opción:

<h:form id="form"> <p:panel id="panel"> <ui:repeat value="#{questionsBean}" var="question"> <h:panelGrid columns="3" style="margin-bottom:10px" cellpadding="5"> <h:outputText value="#{question.questionText}" /> <p:selectOneRadio id="question" value="#{question.response}" validator="#{question.validate}" required="true"> <f:selectItem itemLabel="Yes" itemValue="Yes" /> <f:selectItem itemLabel="No" itemValue="No" /> <p:ajax update="msgQuestion" event="change"/> </p:selectOneRadio> <p:message for="question" id="msgQuestion" /> </h:panelGrid> </ui:repeat> <p:commandButton id="btn" value="Save" update="panel" partialSubmit="true"/> </p:panel> </h:form>


El evento de change HTML DOM es el evento incorrecto cuando desea escuchar si se hace clic en el botón de radio (o en la casilla de verificación). Deberías usar el evento click para esto.

El valor del botón de opción (y casilla de verificación) básicamente nunca cambia. Siempre tiene el mismo valor. La pregunta es si ese valor se enviará al lado del servidor o no. Esto está determinado por el estado "comprobado" que generalmente se desencadena por el evento de click DOM.

El comportamiento real del evento de change en los botones de radio / casillas de verificación depende del navegador web utilizado. El comportamiento es particularmente inconsistente en el navegador IE. No solo depende de la versión utilizada, sino también del modo de renderizado utilizado (modo peculiar versus modo estándar). Quizás estuviste usando IE mientras probabas.

El tipo de event predeterminado de PrimeFaces <p:ajax> (y el estándar JSF <f:ajax> ), que es valueChange ya cubre automáticamente esto:

<p:ajax update="msgQuestion" event="valueChange" />

Esto generará automáticamente el controlador de eventos de change correcto en las entradas de texto y los menús desplegables y el controlador de eventos click en los botones de opción y las casillas de verificación.

Pero como se dijo, ya es el tipo de event predeterminado . Solo omítalo por completo.

<p:ajax update="msgQuestion" />