大家好,在我的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都显示而不是被隐藏。
答案 0 :(得分:2)
如何将具有适当条件的渲染属性添加到h:selectOneMenu?那么你应该可以使用render =“@ form”/ render =“selectRole selectDevice selectUser”而不会有任何问题。 (见Render other selectOneMenu components after selection of one selectOneMenu)