在EL中创建列表

art*_*tol 7 jsp jsp-tags

假设我有一个带有字符串列表的自定义标记:

<%@ attribute name="thelist" type="java.util.List&lt;java.lang.String&gt;"
    required="true" %>
Run Code Online (Sandbox Code Playgroud)

如何在调用标记的jsp中创建此属性?我可以使用scriptlet

<tags:list thelist='<%= java.util.Arrays.asList("blah","blah2") %>' />
Run Code Online (Sandbox Code Playgroud)

但有没有办法使用表达式语言,因为这似乎是首选?

kdg*_*ory 8

如果您只想创建列表,那么您可以使用[<jsp:useBean>][1]在所需范围内创建对象:

<jsp:useBean id="thelist" scope="request" class="java.util.ArrayList" />
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为ArrayList有一个no-args构造函数.但是,列表中没有任何内容.而且,据我所知,EL和JSTL都没有提供用于向集合添加项目的内置机制 - 它们都专注于只读访问.我想你可以定义一个EL函数映射来启用该add()方法.

但是,我认为你最好不要强迫JSP做一些它不想做的事情.在这种情况下,这意味着您应该在Java中编写实际的标记处理程序,而不是使用JSP标记文件.

  • @cahen - 几年来我没有大量使用EL,但我认为没有理由改变它.JSP旨在作为一种视图技术,而变异是控制器应该做的事情. (2认同)

Jas*_*ies 3

从 EL 3 开始,您可以简单地#{['blah','blah2']}创建一个列表。