嗨,在我的 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 的下拉值显示 reminaing div。现在在我的 ajax 事件中,我使用 render="selectDevice" 填充该下拉列表中的值。
我实际上有三个场景:a)如果第一个 div 中的选定项目是“角色”,则所有 roleId 都应填充到第二个 div b)如果第一个 div 中的选定项目是“设备”,则应填充所有 deviceID在第三个 div 中 c)如果第一个 div 中的选定项目是“用户”,则所有用户 ID 都应该填充到第四个 div
我如何才能实现这一点,因为渲染只能渲染一个 div。当我使用 render="@form" 时,所有 div 都会显示而不是隐藏。