简单标记无法解释会话范围属性

时间:2009-07-13 10:55:03

标签: java jsp servlets

我正在尝试在servlet的会话范围内的JSP集中显示 ArrayList 的属性值:

 hs.setAttribute("Attr",arr); //where hs is reference to HttpSession and arr is of type of ArrayList

但是当我在JSP中调用带有EL表达式的简单标记为 optionList 属性值时,建议标记为:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="mine" uri="DiceFunctions" %>


<html><body>

<mine:advice  optionList='${sessionScope.Attr}' />


</body></html>

我没有显示任何内容。

简单标记处理程序的代码是:

package foo;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.*;
import java.io.*;
import javax.servlet.jsp.*;
import java.util.*;

public class AdvisorTagHandler extends SimpleTagSupport{
String name;
String size;
ArrayList option;

public void doTag() throws JspException,IOException{
JspWriter out=getJspContext().getOut();

for(Object o: option)
{
out.print(out.toString());

}

public void setOptionList(List value)
{
option=(ArrayList)value;


}
}

和TLD,在WEB-INF文件夹中设置为:

<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">

<tlib-version>1.2</tlib-version>
<jsp-version>1.2</jsp-version>
<uri>DiceFunctions</uri>

<tag>

<name>advice</name>
<tag-class>foo.AdvisorTagHandler</tag-class>
<body-content>empty</body-content>
<attribute>
<name>optionList</name>
<type>java.util.List</type>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>

我在做什么?如何显示ArrayList对象的值?

提前致谢。

2 个答案:

答案 0 :(得分:2)

我认为你在这一行中有一个简单的错误:

out.print(out.toString());

我想你了

out.print(o.toString());

答案 1 :(得分:1)

我认为这是因为您的TLD将JSP版本指定为1.2。表达式语言仅与JSP 2.0一起提供,因此容器可以显式禁用此标记的表达式。

尝试将jsp-version设置为2.0。另外,检查您的web.xml是否声明为使用版本2.4或更高版本的servlet,如果他们认为引用了早期的servlet版本,则某些容器会禁用这些功能。