我已经创建了一个自定义JSP标记,它应该接受要呈现的产品列表,但是我无法弄清楚如何将列表传递给标记。产品列表作为页面范围的bean存在。 Web应用程序使用Struts taglib。
在Struts 1.2.x中编写以下是我的代码的简化版本:
<%@ tag language="java" pageEncoding="ISO-8859-1" body-content="empty" %>
<%@ attribute name="products" required="false" type="ProductIf[]" %>
<logic:iterate id="product" name="${products}" type="ProductIf">
<!-- Render the product -->
</logic:iterate>
<bean:define id="relatedProducts" name="productMgr" property="relatedProducts />
<my:renderProducts products="${relatedProducts}" />
然而,当我查看页面时,我得到一个例外:
无法将字符串“$ {relatedProducts}”转换为类“[Lcom.foo.ProductIf;”属性“products”:Property Editor未向PropertyEditorManager注册
所以似乎${}
语法不是我需要做的,因为它无论如何都被解释为文字字符串。我也试过在没有${}
的情况下传递bean的名称,结果相同。什么是正确的语法?
(注意:请原谅我,如果这个问题建立在糟糕假设的基础之上,但我是Java EE开发的新手,而且还有相当多的笨手笨脚。)
答案 0 :(得分:1)
阅读http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html:
要停用EL表达式的评估,请指定 page指令的isELIgnored属性:
<%@ page isELIgnored ="true|false" %>
此属性的有效值为true和false。如果是真的, EL表达式出现在静态文本或标记中时会被忽略 属性。如果为false,则EL表达式由 容器
默认值因网络版本而异 应用部署描述符。 JSP页面的默认模式 使用Servlet 2.3或更早版本的描述符传递的是忽略EL 表达式;这提供了向后兼容性。默认模式 对于使用Servlet 2.4描述符提供的JSP页面,要进行评估 EL表达;这会自动提供最多的默认值 应用程序想要。
(强调我的)
因此,要么切换到servlet 2.4或更高的描述符,如果容器支持它,要么使用<%@ page isELIgnored = "false" %>
激活EL。