这是我的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
作为数据库中的值。在这些情况下,值是处理程序列表中第一个处理程序人员的名称。这显然是错误的,因为显示的值不应该是处理程序人员的名字,因为有问题的情况下没有处理程序人员,但是案例行的处理程序列中的空值。
现在,我该如何显示一些自定义文字,例如。 &#34;选择处理程序&#34;当case对象的处理程序属性为null
时?
答案 0 :(得分:1)
显示一个特殊的&#34;选择处理程序&#34;选项,如果您的值为 null ,则只需添加一个
<f:selectItem
itemLabel="Choose handler"
itemValue="#{null}"
/>
到你的selectOneMenu。
要显示此特殊选项,仅当您的值为 null 时,您可以添加一个完全相同的第二个selectOneMenu但没有特殊选项,并为它们提供相反的渲染属性。产生的id问题可以通过将selectOneMenus包含在内来解决。 <p:outputPanel />
具有原始ID属性。
<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>