根据另一个selectOneMenu的选择更改selectOneMenu的值

时间:2014-05-16 20:23:56

标签: java ajax jsf primefaces jquery-ui-selectmenu

我有一个selectOneMenu有两个项目“Granted”和“Dismessed”

<p:panelGrid columns="2">
    <p:outputLabel value="Result: "/>
    <p:selectOneMenu id="omResult" value="#{opcoesMB.result}" style="width: 200px">
        <f:selectItem itemLabel="Granted" itemValue="1"/>
        <f:selectItem itemLabel="Dismessed" itemValue="2"/>
    </p:selectOneMenu>
</p:panelGrid>

我还有两个selectOneMenu,其中一个从名为operationRestrictedList的列表中选取项目,在这种情况下,如果选择了“Granted”项,则使​​用它们。

<p:selectOneMenu id="omResultGranted" value="#{optionsMB.operationRestricted}" style="width: 200px">
    <f:selectItem itemLabel="Select..." itemValue="#{null}"/>
    <f:selectItems value="#{optionsMB.restricaoOperacaoList}" var="rest" itemLabel="#{rest.title}" itemValue="#{rest.id}"/>
</p:selectOneMenu>

另一个获取itemsityList调用的项目列表,如果选择了“desmissed”项,则会出现这种情况。

<p:selectOneMenu id="omResultDesmissed" value="#{optionsMB.irregularity}" style="width: 200px">
    <f:selectItem itemLabel="Select... " itemValue="#{null}"/>
    <f:selectItems value="#{opcoesMB.irregularilityList}" var="irregula" itemLabel="#{irregula.description}" itemValue="#{irregula.id}"/>
</p:selectOneMenu>

好吧我并不是那个意思,我想只有两个selectOneMenu,第二个被设置为第一个selectOneMenu中选择的项目,但我不知道如何做到这一点,我是新手jsf,有人可以帮我说一下我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

为此,您只需要一个监听器并更新第二个selectOneMenu。

XHTML:

<p:selectOneMenu id="id1" value="#{bean.item1}">
    <f:selectItems value="#{bean.list1}" var="item" itemLabel="#{item.name}" itemValue="#{item.id}" /> 
    <p:ajax update="id2" listener="#{bean.listener}" />
</p:selectOneMenu>

<p:selectOneMenu id="id2" value="#{bean.item2}">
    <f:selectItems value="#{bean.list2}" var="item" itemLabel="#{item.name}" itemValue="#{item.id}" />
</p:selectOneMenu>

在您的bean中,您只需要为您的列表提供所需的值。

Bean:

public void listener() {
    //Do some stuff for feeding you second list
    list2.add(...);
}

答案 1 :(得分:0)

第二个selectMenu可以通过支持bean使用AJAX动态填充。

示例:

<h:selectOneMenu value="#{bean.selected}">
                <f:selectItem itemValue="#{null}" itemLabel="Select..." />
                <f:selectItem itemValue="one" />
                <f:selectItem itemValue="two" />
                <f:selectItem itemValue="three" />
                <f:ajax listener="#{bean.listener}" render="result" />
</h:selectOneMenu>

BackingBean:

@ViewScoped
public class Bean implements Serializable {

    private String selected;
    private String result;
    private List conditionalList; /*<-- You'll need setter and getter */

    public void submit() {
        System.out.println("submit");
    }

    public void listener(AjaxBehaviorEvent event) {
        System.out.println("listener");
        result = "called by " + event.getComponent().getClass().getName();
        /* Add to list here */
        conditionalList.add(getSelected());
    }

    public String getSelected() {
        return selected;
    }

    public void setSelected(String selected) {
        this.selected = selected;
    }

    public String getResult() {
        return result;
    }

}

填写其他selectMenu:

<p:selectOneMenu id="result" value="#{bean.selected2}">
    <f:selectItems value="#{bean.conditionalList}" var="item" itemLabel="#{item.name}" itemValue="#{item.id}" />
</p:selectOneMenu>

答案 2 :(得分:-1)

我的解决方案..

<p:panelGrid  id="pgResHighRisc"
           columns="2">
                                        <p:outputLabel value="Result: "/>
                                        <p:selectOneMenu value="#{optionsMB.typeResult}">
                                            <f:selectItem itemLabel="Granted"
                                                          itemValue="F"/>
                                            <f:selectItem itemLabel="Desmissed"
                                                          itemValue="J"/>
                                            <p:ajax event="change"
                                                    update="pgResHighRisc"/>
                                        </p:selectOneMenu>
                                        <p:outputLabel value="Restriction: "/>
                                        <p:selectOneMenu value="#{optionsMB.operationRestriction}"
                                                         style="width: 200px"
                                                         rendered="#{'F' eq optionsMB.typeResult}">
                                            <f:selectItems value="#{optionsMB.operationRestrictionList}"
                                                           var="oper"
                                                           itemLabel="#{oper.tittle}"
                                                           itemValue="#{oper.id}"/>
                                        </p:selectOneMenu>
                                        <p:selectOneMenu value="#{optionsMB.irregularity}" style="width: 200px"
                                                         rendered="#{'J' eq opcoesMB.typeResult}">
                                            <f:selectItems value="#{optionsMB.irregularityList}" var="irreg"
                                                           itemLabel="#{irreg.description}"
                                                           itemValue="#{irreg.id}"
                                                           />