0

我正在尝试迭代一组元素,这些元素是复杂类型(另一个实体),使用<c:forEach>

<c:forEach items="#{repcatTree.items}" var="item">
    <div style="padding-top:7px; padding-bottom:7px; padding-right:15px;">
        <span class="report_item_category_class">
            <h:commandLink rendered="#{item.type == 'category'}" action="#{item.onNodeClicked}" styleClass="default_link">
                <h:graphicImage url="/views/tree/images/folder_big.gif" />
                <h:outputText value="#{item.attributes.FILE_NAME}" style="font-size:14px; font-weight:bold; padding-left:5px" />
            </h:commandLink>
            <h:commandLink rendered="#{item.type == 'report'}" styleClass="default_link" action="action_report_run" title="#{item.cells['report_name'].toolTip}">
                <h:graphicImage url="/icon?rdd_path=#{item.attributes.RDD_PATH}" />               
                <h:outputText value="#{item.cells['report_name'].display}" style="font-size:14px; font-weight:bold; padding-left:5px" />
                <f:param name="nodePath" value="#{item.attributes.RDD_PATH}" />
                <f:param name="nodePrettyPath" value="#{item.attributes.CAT_PATH}" />
            </h:commandLink>
        </span>
    </div>
</c:forEach>

但是,在 forEach 块逻辑内部将 '#{item}' 元素视为常规java.lang.String原因

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

这是我的faces-config.xml(JSF 1.2)相关映射条目:

<managed-bean>
    <managed-bean-name>repcatTree</managed-bean-name>   
    <managed-bean-class>rpt.engine.runner.tree.impl.RepcatTreeModel</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <managed-property>
        <property-name>path</property-name>
        <property-class>java.lang.String</property-class>
        <value>/</value>
    </managed-property>
    <managed-property>
        <property-name>listener</property-name>
        <property-class>rpt.engine.runner.tree.listeners.ReportsTreeModelListener</property-class>
        <value>#{reportsTreeModelListener}</value>
    </managed-property>       
    <managed-property>
        <property-name>tableModel</property-name>
        <property-class>rpt.engine.runner.table.TableModel</property-class>
        <value>#{repcatTableModel}</value>
    </managed-property>
</managed-bean> 

这是如何引起的,我该如何解决?

4

1 回答 1

3

如果您对环境使用了错误的 JSTL 版本或使用了错误的 JSTL taglib URI 声明,就会发生这种情况。

JSF 1.2 至少意味着 Servlet 2.5(您的 webappweb.xml也必须这样声明!),这反过来意味着至少 JSTL 1.2,这反过来意味着 taglib URI 为http://java.sun.com/jsp/jstl/core.

确保你做对了一切。导致您的特定问题是因为#{repcatTree.items}没有被解释为 EL 表达式,而是被解释为纯字符串,这表明 JSTL 中的 EL 根本不起作用,这反过来表明您可能正在使用 JSTL 1.0/1.1(请注意 Glassfish已经捆绑了 JSTL,所以你不应该随你的 webapp 一起发布任何东西),或者使用没有/jsp路径的 JSTL 1.0 taglib URI,或者web.xml没有声明符合 Servlet 2.5。

也可以看看:

于 2013-04-12T14:15:27.853 回答