【问题标题】:Disable one dropdown when a specific option of another is selected选择另一个的特定选项时禁用一个下拉菜单
【发布时间】:2012-08-21 16:47:51
【问题描述】:

我在一个表单中有两个下拉菜单。第一个包含这些选项:

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

选择“Rejettée”时,我想禁用第二个下拉列表。

这里是两个下拉菜单的相关代码:

<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>  

我怎样才能做到这一点?

【问题讨论】:

    标签: ajax drop-down-menu jsf-2 primefaces


    【解决方案1】:

    试试这个:

    <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;
    }
    

    【讨论】:

    • 感谢您的回复,不幸的是,这让我在这上面写了一条红线:#{editCommandController.myCom.decision ne empty and editCommandController.myCom.decision eq 'rejettée'}
    • 完全删除第一个and 条件。这完全没有意义。
    • 我将 ne empty 替换为 not empty 但同样的问题
    • 完全删除它。你根本不需要它。只需 disabled="#{editCommandController.myCom.decision eq 'rejettée'}" 即可。
    • @BalusC 谢谢指点,我不知道我在想什么。
    猜你喜欢
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多