Jsp 在EL中创建列表
假设我有一个自定义标记,它包含一个字符串列表:Jsp 在EL中创建列表,jsp,jsp-tags,Jsp,Jsp Tags,假设我有一个自定义标记,它包含一个字符串列表: <%@ attribute name="thelist" type="java.util.List<java.lang.String>" required="true" %> 如何在调用标记的jsp中创建此属性?我可以用脚本 <tags:list thelist='<%= java.util.Arrays.asList("blah","blah2") %>' />
<%@ attribute name="thelist" type="java.util.List<java.lang.String>"
required="true" %>
如何在调用标记的jsp中创建此属性?我可以用脚本
<tags:list thelist='<%= java.util.Arrays.asList("blah","blah2") %>' />
但是有没有办法使用表达式语言来实现这一点,因为这似乎是首选方法?如果您只想创建列表,那么您可以使用
[[1]
在所需的范围内创建对象:
<jsp:useBean id="thelist" scope="request" class="java.util.ArrayList" />
这是因为ArrayList没有参数构造函数。但是,列表中不会包含任何内容。而且,据我所知,EL和JSTL都没有为向集合添加项提供内置机制——它们都专注于只读访问。我想您可以定义一个函数来启用add()
方法
然而,我认为最好不要强迫JSP做它不想做的事情。在本例中,这意味着您不应该使用JSP标记文件,而应该用Java编写一个实际的标记处理程序。。例如,类似这样的内容:
#{foo:add(foo:add(foo:add(foo:newList(), 'One'), 'Two'), 'Three')}
你只是遇到了过去被称为
通过其他机制(如bean)更容易做到这一点。如果您想避免使用scriptlet或丑陋的EL函数,您可以使用自己的生成器并愚弄EL解释器:
...
<jsp:useBean id="listBuilder" class="com.example.ELListBuilder"/>
<ul>
<c:forEach var="item" items="${listBuilder['red']['yellow']['green'].build}">
<li>${item}</li>
</c:forEach>
</ul>
...
。。。
- ${item}
...
检查这里的示例:自EL 3以来,您只需执行
{['blah','blah2']}
即可创建一个列表。EL自2009年以来有了新功能:请参见。4年后是否仍然如此:“EL和JSTL都不提供向集合添加项目的内置机制”。找不到办法this@cahen-我已经好几年没有大量使用EL了,但我认为没有理由改变它。JSP旨在作为一种视图技术,而变异是控制器应该做的事情。