如何将bean作为参数传递给JSP标记?

时间:2012-02-06 20:21:30

标签: jsp java-ee struts jsp-tags

我已经创建了一个自定义JSP标记,它应该接受要呈现的产品列表,但是我无法弄清楚如何将列表传递给标记。产品列表作为页面范围的bean存在。 Web应用程序使用Struts taglib

在Struts 1.2.x中编写

以下是我的代码的简化版本:

renderProducts.tag

<%@ 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>

ProductDetail.jsp

<bean:define id="relatedProducts" name="productMgr" property="relatedProducts />
<my:renderProducts products="${relatedProducts}" />

然而,当我查看页面时,我得到一个例外:

  

无法将字符串“$ {relatedProducts}”转换为类“[Lcom.foo.ProductIf;”属性“products”:Property Editor未向PropertyEditorManager注册

所以似乎${}语法不是我需要做的,因为它无论如何都被解释为文字字符串。我也试过在没有${}的情况下传递bean的名称,结果相同。什么是正确的语法?

(注意:请原谅我,如果这个问题建立在糟糕假设的基础之上,但我是Java EE开发的新手,而且还有相当多的笨手笨脚。)

1 个答案:

答案 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。

相关问题