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" />