これを試して:
<h:outputLabel for="dec" value="Decision : " />
<p:selectOneMenu required="true"
requiredMessage="veuillez choisir une decision" id="dec"
value="#{editCommandController.myCom.decision}">
<f:selectItems value="#{editCommandController.decisions}" />
<p:ajax update="etat" event="change"/>
</p:selectOneMenu>
<p:message for="dec" display="icon" />
<h:outputLabel for="etat" value="Etat : " />
<p:selectOneMenu id="etat" value="#{editCommandController.myCom.etat}" disabled="#{editCommandController.myCom.decision eq 'rejettée'}">
<f:selectItems value="#{editCommandController.etats}" />
</p:selectOneMenu>
<p:message for="etat" display="icon" />
変更時にデフォルト値に設定するには、これを試してください:
<h:outputLabel for="dec" value="Decision : " />
<p:selectOneMenu required="true"
requiredMessage="veuillez choisir une decision" id="dec"
value="#{editCommandController.myCom.decision}" valueChangeListener="#{editCommandController.vclistener}">
<f:selectItems value="#{editCommandController.decisions}" />
<p:ajax />
</p:selectOneMenu>
<p:message for="dec" display="icon" />
<h:outputLabel for="etat" value="Etat : " />
<p:selectOneMenu id="etat" value="#{editCommandController.myCom.etat}" disabled="#{editCommandController.myCom.decision ne 'rejettée'}">
<f:selectItems value="#{editCommandController.etats}" />
</p:selectOneMenu>
<p:message for="etat" display="icon" />
次に、バッキング Bean に selectItem が存在しない場合は追加します。それ以外の場合はスキップできます。
public static List<SelectItem> etats = new ArrayList<SelectItem>() { {
add(new SelectItem("Cheese", "Cheese"));
add(new SelectItem("Pickle", "Pickle"));
add(new SelectItem("Mustard", "Mustard"));
add(new SelectItem("Lettuce", "Lettuce"));
}};
public void vclistener(ValueChangeEvent e){
if(e.getNewValue().equals("rejettée")){
EditCommandController.etats.add(0, new SelectItem("Ketchup", "Ketchup"));
myCom.setEtat("Ketchup");
}
RequestContext.getCurrentInstance().update("etat");
}
public List<SelectItem> getEtats() {
return etats;
}
public void setEtats(List<SelectItem> etats) {
EditCommandController.etats = etats;
}