我试图迭代元素的集合,这是复杂的类型(另一个实体)使用<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。字符串'没有'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>
这是如何引起的,我该如何解决?
如果您为环境使用了错误的JSTL版本或使用了错误的JSTL标签库URI声明,则可能发生这种情况。
JSF 1.2意味着Servlet 2.5的最小值(您的web应用程序的web.xml
也必须声明为这样!),这反过来又意味着JSTL 1.2的最小值,这反过来又意味着http://java.sun.com/jsp/jstl/core
的标记库URI。
确保你做对了一切。你的特殊问题是由于#{repcatTree.items}
没有被解释为EL表达式,而是作为普通字符串,表明JSTL中的EL根本不起作用,这反过来表明你可能使用JSTL 1.0/1.1(注意,Glassfish已经捆绑了JSTL,所以你不应该随你的webapp一起发布任何),或者使用JSTL 1.0标记库URI而没有/jsp
路径,或者web.xml
没有声明符合Servlet 2.5。
参见:
- 我们的JSTL wiki页面-包含下载链接和安装说明