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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top