0

1つのフォームに2つのドロップダウンがあります。最初のオプションには次のものが含まれます。

String[] decisions = {"acceptée", "rejettée"};

「rejettée」を選択した場合、2番目のドロップダウンを無効にします。

2つのドロップダウンに関連するコードは次のとおりです。

<p:selectOneMenu required="true" requiredMessage="veuillez choisir une decision" id="dec" value="#{editCommandController.myCom.decision}">  
    <f:selectItems value="#{editCommandController.decisions}" />            
</p:selectOneMenu>  
<p:selectOneMenu  id="etat" value="#{editCommandController.myCom.etat}">  
    <f:selectItems value="#{editCommandController.etats}" />   
</p:selectOneMenu>  

どうすればこれを達成できますか?

4

1 に答える 1

0

これを試して:

<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;
}
于 2012-08-21T17:28:43.990 に答える