使用JSP的问题<c:foreach> </c:foreach>

时间:2012-12-17 15:24:25

标签: jsp jsf

我正在尝试迭代项目集合:

<c:forEach items="#{tree.items}" var="item">
    <h:commandLink rendered="#{item.type == 'category'}" action="#{item.onNodeClicked}"

Hovewer,我有一个例外:

  

javax.el.PropertyNotFoundException:类'java.lang.String'没有属性'type'。

看起来JSP将树项识别为String对象。我错过了什么?

1 个答案:

答案 0 :(得分:1)

这不起作用。 #{item}仅在视图构建时可用,而rendered属性在视图渲染时评估。

改为使用<c:if>

<c:forEach items="#{tree.items}" var="item">
    <c:if test="#{item.type == 'category'}">
        <h:commandLink ... action="#{item.onNodeClicked}" />

或者,如果您使用的是JSF2(已经超过3年),请将其继承者Facelets替换为旧版JSP,并使用其<ui:repeat>组件。它也在视图渲染时间内进行了评估。

<ui:repeat value="#{tree.items}" var="item">
    <h:commandLink rendered="#{item.type == 'category'}" action="#{item.onNodeClicked}" />