如何将值添加到jsp:useBean引用的ArrayList中?

时间:2011-05-16 23:10:08

标签: jsp arraylist jstl usebean

在JSP / JSTL中,如何为class =“java.util.ArrayList”的usebean设置值。

如果我尝试使用c:set属性或值,我会收到以下错误: javax.servlet.jsp.JspTagException:无效的属性:“null”

1 个答案:

答案 0 :(得分:2)

这不是直接可能的。有<c:set><jsp:setProperty>标记,允许您通过setter方法在完整的javabean中设置属性。但是,List接口没有setter,只有add()方法。

解决方法是将列表包装在真正的javabean中,如下所示:

public class ListBean {

    private List<Object> list = new ArrayList<Object>();

    public void setChild(Object object) {
        list.add(object);
    }

    public List<Object> getList() {
        return list;
    }
}

并按

设置
<jsp:useBean id="listBean" class="com.example.ListBean" scope="request" />
<jsp:setProperty name="listBean" property="child" value="foo" />
<jsp:setProperty name="listBean" property="child" value="bar" />
<jsp:setProperty name="listBean" property="child" value="waa" />

但这没什么意义。如何正确地解决它取决于唯一的功能要求。如果要在GET请求中保留一些List,那么您应该使用预处理servlet。创建一个servlet,它在doGet()方法中执行以下操作:

List<String> list = Arrays.asList("foo", "bar", "waa");
request.setAttribute("list", list);
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);

当您通过URL调用servlet时,该列表位于

提供的转发JSP中
${list}

没有需要旧式<jsp:useBean>标签。在servlet中,您可以自由地以通常的方式编写Java代码。这样,您只需使用JSP进行纯粹的演示,而无需通过<jsp:useBean>标记来吞噬/破解某些预处理逻辑。

另见: