以JSF形式呈现多个选择框的值

时间:2013-10-16 16:31:06

标签: jsf jsf-2 primefaces jsf-1.2

大家好,在我的JSF表单中,我有三个选择框。这是代码:

<h:form id="newRequestForm">
                <h1>New Request</h1>
                <br/>
                <h:panelGrid columns="4">


                    <h:selectOneMenu id="issueID" style="margin-left: 3px;" value="#{mycontroller.requestType}">
                        --few items----
                        <f:ajax event="change" listener="#{mycontroller.changeTypeList}"  render="selectDevice" execute="@this" />
                    </h:selectOneMenu>


                <br/>

                <div id="sessionDiv" columns="2">

                    <h:selectOneMenu id="selectRole" style="margin-left: 29px;" value="#{mycontroller.roleID}">
                        <f:selectItems  value="#{mycontroller.roleList}"  itemValue="#{mycontroller.roleList}"/>
                    </h:selectOneMenu>  
                </div>
                <div id="deviceDiv" columns="2">

                    <h:selectOneMenu id="selectDevice" style="margin-left: 18px;" value="#{mycontroller.userId}">
                        <f:selectItems  value="#{mycontroller.deviceList}" var="device" itemValue="#{device.deviceId}"/>
                    </h:selectOneMenu> 
                </div>
                <div id="userDiv" columns="2">

                    <h:selectOneMenu id="selectUser" style="margin-left: 50px;" value="#{mycontroller.userIdReq}">
                        <f:selectItems  value="#{mycontroller.usersList}"  var="user" itemValue="#{user.userId}"/>
                    </h:selectOneMenu> 
                </div>
                <br/>

                <br/>

                <h:commandButton action="#{requestSupportController.submitRequest}"   value="Submit Request" style="margin-top: 20px"/>   

            </h:form>

现在当表单首次加载时,最后三个div被隐藏,并且根据第一个div的下拉值显示了提醒div。现在我的ajax事件中我使用了render =“selectDevice”来填充其中的值下降。

我实际上有三种情况: a)如果第一个div中的所选项目是“角色”,则所有roleId都应该填充在第二个div中 b)如果第一个div中的所选项目是“Device”,则应在第三个div中填充所有deviceID c)如果第一个div中的所选项目是“Users”,那么所有userID都应该填入第四个div中

我如何实现这一点,因为渲染只能渲染一个div。当我使用render =“@ form”时,所有的div都显示而不是被隐藏。

1 个答案:

答案 0 :(得分:2)

如何将具有适当条件的渲染属性添加到h:selectOneMenu?那么你应该可以使用render =“@ form”/ render =“selectRole selectDevice selectUser”而不会有任何问题。 (见Render other selectOneMenu components after selection of one selectOneMenu