Le adfface ignora immediatamente se l'ingresso richiesto ha partialtrigger il componente di sottomissione
-
29-10-2019 - |
Domanda
Ho un selectOneChoice
insieme a autoSubmit=true
e immediate=true
per saltare la convalida, se il selectOneChoice
è impostato su un valore che voglio Rimuovere l'attributo richiesto da un testo input, così la inputText
avrà partialTrigger
l'ID del selectOneChoice
, ma quando cambio il valore dal selectOneChoice
(e la modifica viene inviata) La convalida richiesta è ancora attivata solo per il componente che deve essere aggiornato (a causa della presenza dei parziali) gli altri componenti richiesti non ne innescano la convalida.
Qualche alternativa?
Soluzione
È necessario modificare l'indicatore richiesto in un Valuechangelistener. Ciò accadrà prima che il modello venga aggiornato.
Ad esempio, dato questo frammento 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>
E questo ascoltatore, ottieni il comportamento che descrivi.
public void selectionChange(ValueChangeEvent valueChangeEvent) {
String newValue = valueChangeEvent.getNewValue().toString();
RichInputText it = (RichInputText)valueChangeEvent.getComponent().findComponent("it1");
it.setRequired(!"two".equals(newValue));
}
Altri suggerimenti
Puoi pubblicare l'espressione El per l'attributo richiesto del tuo 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>
Se si desidera saltare la convalida, fai saltare la convalida su True su Pagomef.