ADFfaces Ignore Immediate si l'entrée requise a partialTrigger le composant soumissionnaire
-
29-10-2019 - |
Question
J'ai un selectOneChoice
avec autoSubmit=true
et immediate=true
pour ignorer la validation, si le selectOneChoice
est défini sur une valeur, je veux supprimer l'attribut requis d'un inputText , donc le inputText
aura partialTrigger
l'id dele selectOneChoice
, mais lorsque je change la valeur du selectOneChoice
(et que le changement est soumis), la validation requise est toujours déclenchée uniquement pour le composant qui doit être mis à jour (en raison de la présence des partialTriggers) les autres composants requis ne sont pasdéclencher sa validation.
Des solutions de contournement?
La solution
Vous devez changer l'indicateur requis dans un valueChangeListener.Cela se produira avant la mise à jour du modèle.
Par exemple, étant donné ce fragment 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>
Et cet auditeur, vous obtenez le comportement que vous décrivez.
public void selectionChange(ValueChangeEvent valueChangeEvent) {
String newValue = valueChangeEvent.getNewValue().toString();
RichInputText it = (RichInputText)valueChangeEvent.getComponent().findComponent("it1");
it.setRequired(!"two".equals(newValue));
}
Autres conseils
Pouvez-vous publier l'expression EL pour l'attribut requis de votre 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 vous souhaitez ignorer la validation, définissez l'option Ignorer la validation sur True sur pagedef.