这是我的selectOneMenu:
<h:form>
<p:selectOneMenu id="handlerSelect" value="#{caseController.case.handler}"
converter="omnifaces.SelectItemsIndexConverter" style="width:182px">
<f:selectItems value="#{handlerController.findAllHandlers()}"
var="handlerSelect" itemLabel="#{handlerSelect.name}"
itemValue="#{handlerSelect}" />
<p:ajax event="change"listener="#{caseController.changeHandler}" update="handlerSelect"/>
</p:selectOneMenu>
</h:form>
当用户打开视图时,此selectOneMenu
中显示的默认值是用户打开的案例的处理人员的名称。现在,有些情况下数据库中的值为null
。在这些情况下,值是处理程序列表中第一个处理程序人员的名称。这显然是错误的,因为显示的值不应该是处理人员的名字,因为有问题的案例没有处理人员,而是案例行的处理人员列中有一个null。
现在,当case对象上的handler属性为null
时,我如何显示一些自定义文本,例如"Choose handler"?
要显示一个特殊的"选择处理程序"选项,如果您的值为null,只需添加一个额外的
<f:selectItem
itemLabel="Choose handler"
itemValue="#{null}"
/>
到您选择的OneMenu。
若要显示此特殊选项,仅当您的值为null时,您可以添加一个完全相同的第二个selectOneMenu,但没有特殊选项,并为它们提供相反的渲染属性。由此产生的id问题可以通过用例如具有原始id属性的<p:outputPanel />
封装selectOneMenus来解决。
<h:form>
<p:outputPanel id="handlerSelect">
<p:selectOneMenu
value="#{caseController.case.handler}"
converter="omnifaces.SelectItemsIndexConverter"
style="width:182px"
rendered="#{caseController.case.handler eq null}"
>
<f:selectItem
itemLabel="Choose handler"
itemValue="#{null}"
/>
<f:selectItems
value="#{handlerController.findAllHandlers()}"
var="handlerSelect"
itemLabel="#{handlerSelect.name}"
itemValue="#{handlerSelect}"
/>
<p:ajax
event="change"
listener="#{caseController.changeHandler}"
update="handlerSelect"
/>
</p:selectOneMenu>
<p:selectOneMenu
value="#{caseController.case.handler}"
converter="omnifaces.SelectItemsIndexConverter"
style="width:182px"
rendered="#{caseController.case.handler ne null}"
>
<f:selectItems
value="#{handlerController.findAllHandlers()}"
var="handlerSelect"
itemLabel="#{handlerSelect.name}"
itemValue="#{handlerSelect}"
/>
<p:ajax
event="change"
listener="#{caseController.changeHandler}"
update="handlerSelect"
/>
</p:selectOneMenu>
</p:outputPanel>
</h:form>