在我的应用程序中,我有三个下拉菜单p:selectOneMenu
(当从这三个下拉菜单触发 on-change 事件时,文本框的值由 ajax 生成。
这是xhtml:
<p:selectOneMenu id="customerMenu" value="#{adminController.activityDTO.customerId}" required="true" label="Customer Name" style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.customers}" var="customer" itemLabel="#{customer.customerName}" itemValue="#{customer.customerId}" />
<p:ajax listener="#{adminController.generateActivityName}" update="activityId" />
</p:selectOneMenu>
<p:selectOneMenu id="activityTypeMenu" value="#{adminController.activityDTO.activityParentType}" required="true" label="Activity Type"
style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.activityTypes}" var="activityType" itemLabel="#{activityType.parent}" itemValue="#{activityType.parent}" />
<p:ajax listener="#{adminController.updateDependentActivity}" update="activitySubType" />
</p:selectOneMenu>
<p:selectOneMenu id="activitySubTypeMenu" value="#{adminController.activityDTO.activitySubType}" required="true" label="Activity Sub Type"
style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.activitySubTypes}" var="activityType" itemLabel="#{activityType.name}" itemValue="#{activityType.id}" />
<p:ajax listener="#{adminController.generateActivityId}" update="activityId" />
</p:selectOneMenu>
<p:inputText id="activityId" autocomplete="off" readonly="true" value="#{adminController.activityDTO.activityId}"
label="#{adbBundle['admin.addActivityPanel.addActivityTable.activityId']}" required="true" />
和依赖于我正在填充的activityTypeMenu
选定activitySubTypeMenu
值。activityTypeMenu
activitySubTypeMenu
现在我面临的问题是:
- 假设我选择了“外部”和“内部”
activityTypeMenu
,默认“选择一个”。activityTypeMenu
如果我从“activitySubTypeMenu
项目”和“服务”中选择“外部”。但是,如果我选择默认的“选择一个”,activitySubTypeMenu
则仍然保留以前动态填充的值。这是因为该required="true"
属性拒绝触发我从中加载动态值的后端方法。 - 我尝试将 of 设置
itemValue
为<f:selectItem itemLabel="Select One" itemValue="" />
,#{null}
然后在选择“选择一个”选项时触发后端方法,我可以设置一个空列表activitySubTypes
,这样就可以了activitySubTypeMenu
。但在那种情况下,required="true"
它变得毫无意义。我的意思是,我也有保存按钮,点击该按钮而不选择任何选项(即选择“选择一个”),activityTypeMenu
而activitySubTypeMenu
不是抛出ValidatorException
,并且组件没有被 Primefaces 的错误 css 类设置样式。 - 此外,如果我没有将
itemValue
of设置<f:selectItem itemLabel="Select One" itemValue="" />
为#{null}
然后将所选值更改为默认选项(“选择一个”)不会清除activityId
p:inputText
. 如果我使用#{null}
,那么我可以获得后端方法触发,我可以将文本框的值设置为空。
我如何解决这个问题并获得预期的结果。我想要的是:
- 如果选项设置为“选择一个”,则相关菜单将为空,文本框的菜单为空。
- 我想使用该
required="true"
属性。