Pregunta

tengo un selectOneChoice con autoSubmit=true y immediate=true para omitir la validación, si el selectOneChoice está configurado en algún valor que quiero Elimine el atributo requerido de un InputText, entonces el inputText tendrá partialTrigger la identificación del selectOneChoice, pero cuando cambio el valor del selectOneChoice (y se envía el cambio) La validación requerida todavía se desencadena solo para el componente que debe actualizarse (debido a la presencia de los Triggers parciales), los otros componentes requeridos no desencadenan su validación.
¿Alguna solución?

¿Fue útil?

Solución

Debe cambiar el indicador requerido en un valueChangeListener. Esto sucederá antes de que se actualice el modelo.

Por ejemplo, dado este fragmento JSF.

<af:panelFormLayout id="pfl1">
  <af:inputText label="Label 1" id="it1" value="#{pageFlowScope.RemoveRequiredBean.myValue}" required="true" partialTriggers="soc1"/>
  <af:selectOneChoice label="Selection" value="#{pageFlowScope.RemoveRequiredBean.selection}" id="soc1" autoSubmit="true" immediate="true"
                      valueChangeListener="#{pageFlowScope.RemoveRequiredBean.selectionChange}">
    <af:selectItem label="one" value="one" id="si3"/>
    <af:selectItem label="two" value="two" id="si1"/>
    <af:selectItem label="three" value="three" id="si2"/>
  </af:selectOneChoice>
  <af:commandButton text="commandButton 1" id="cb1"/>
  <f:facet name="footer"/>
</af:panelFormLayout>

Y este oyente, obtienes el comportamiento que describes.

public void selectionChange(ValueChangeEvent valueChangeEvent) {
    String newValue = valueChangeEvent.getNewValue().toString();
    RichInputText it = (RichInputText)valueChangeEvent.getComponent().findComponent("it1");
    it.setRequired(!"two".equals(newValue));
}

Otros consejos

¿Puede publicar la expresión EL para el atributo requerido de su InputText?

<af:inputText label="ResId" id="it1" required="#{someValueExpression}"
                    partialTriggers="soc1">            
      </af:inputText>
      <af:selectOneChoice label="Label 1" id="soc1" autoSubmit="true">
        <af:selectItem label="test" value="test" id="si1"/>
        <af:selectItem label="test2" value="test2" id="si12"/>
      </af:selectOneChoice>

Si desea omitir la validación, haga que la validación de omitir a verdadera en Pagedef.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top