如何在p中显示空值:SelectOneMenu ONLY当支持bean中的所述值为空时?

时间:2016-07-18 08:15:43

标签: jsf primefaces null selectonemenu

这是我的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时?

1 个答案:

答案 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>