数据表中<c:when>的评估不起作用</c:when>

时间:2014-04-09 20:59:36

标签: jsf primefaces el evaluation

我已经搜索过并试过了,但这次我真的被卡住了。

我正在尝试构建一个简单的数据表(primefaces),其中单元格内容可以是不同类型。每个单元格内容都有一个持有者类,可以容纳不同的实体,我想使用&lt; C:选择&GT;以实体特定的方式检查和显示正确的实体。

代码如下:

<p:dataTable emptyMessage="" value="#{date.getThreadContent(column.propertyID)}" var="content">

                    <p:column>
                        #{content.type}

                        <c:choose>
                            <c:when test="#{content.type == 'activity'}">
                                #{content.activity.name}
                            </c:when>   
                            <c:when test="#{content.type == 'todo'}">
                                #{content.activity.name}
                            </c:when>
                            <c:otherwise>
                                Neither activity or todo
                            </c:otherwise>
                        </c:choose>
                    </p:column>

                </p:dataTable>

无论我在bean中尝试布尔值或字符串值(我在上面的代码中使用字符串值),EL评估都不起作用。 因此,每次内容不为空时,输出首先显示#{content.type}中的正确内容类型,然后与“不活动或待办事项”一起显示。

我还可以说这个数据表本身表示父数据表中的单元格内容(每个日期的实体列表),在我尝试隔离问题时,此代码中不可见。

这种类型的表达式是不是可以在一个? 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

使用JSF呈现的标记来执行条件显示逻辑,它将它从DOM中完全删除并使验证更容易。

请参阅:http://docs.oracle.com/javaee/6/tutorial/doc/bnaik.html了解EL表达式 此外,BalusC还提供了一个很好的解释:JSTL c:if doesn't work inside a JSF h:dataTable

<p:dataTable emptyMessage="" value="#{date.getThreadContent(column.propertyID)}" var="content">
   <p:column>
         #{content.type}
          <h:outputText value="#{content.activity.name}" rendered="#{content.type == 'activity' or content.type == 'todo'}" />

          <h:outputText value="Neither activity or todo" rendered="#{content.type != 'activity' and content.type != 'todo'}" />   
   </p:column>

</p:dataTable>