ADFFACES ignora de inmediato si la entrada requerida tiene parcialmente el componente de envío
-
29-10-2019 - |
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?
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.