Alp*_*nae 22 arrays jsp jstl el scriptlet
我正在使用Java及其框架(Spring 3.1.1)开发Web应用程序.我试图避免尽可能多地使用scriptlet,但是我找不到除此之外的方法来定义数组:
<%
String[] alphabet = {"A", "B", "C", ... , "Z"};
pageContext.setAttribute("alphabet", alphabet);
%>
Run Code Online (Sandbox Code Playgroud)
设置pageContext属性后,我可以使用它${alphabet}
.但我想知道,是否可以使用普通的JSTL/EL来创建数组?
更新:我正在使用此数组来创建链接.例如,如果用户单击"S",则会出现名字以"S"开头的员工列表.因此,我不是逐个创建链接而是迭代${alphabet}
.
Bal*_*usC 45
如果您已经使用EL 3.0(Tomcat 8 +,WildFly 8 +,GlassFish 4 +,Payara 4 +,TomEE 7+等),它支持对集合对象的新操作,您可以使用${[...]}
语法构建列表,并且${{...}}
用于构造集合的语法.
<c:set var="alphabet" value="${['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']}" scope="application" />
Run Code Online (Sandbox Code Playgroud)
如果您还没有使用EL 3.0,请${fn:split()}
在单个字符串上使用函数技巧,该字符串通过公共分隔符(如逗号)分隔各个字符.
<c:set var="alphabet" value="${fn:split('A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z', ',')}" scope="application" />
Run Code Online (Sandbox Code Playgroud)
但我同意你最好使用普通的Java代码.鉴于它显然是静态数据,只需创建此侦听器类:
@WebListener
public class ApplicationData implements ServletContextListener {
private static final String[] ALPHABET = { "A", "B", "C", ..., "Z" };
@Override
public void contextInitialized(ServletContextEvent event) {
event.getServletContext().setAttribute("alphabet", ALPHABET);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// NOOP.
}
}
Run Code Online (Sandbox Code Playgroud)
它将在webapp的启动时透明地自动注册,并将所需的数据放入应用程序范围.
And*_*nko 23
如果你想在字符串中迭代标记,那么只需使用forTokens
:
<c:set var="alphabet">A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z</c:set>
<c:forTokens items="${alphabet}" delims="," var="letter">
${letter}
</c:forTokens>
Run Code Online (Sandbox Code Playgroud)
如果您使用Java EE 7 /表达式语言3.0,则可以创建List
文字
<c:set var="alphabet" value="${['A', 'B', 'C', ... , 'Z']}" />
Run Code Online (Sandbox Code Playgroud)
然后可以像遍历一样进行迭代Array
。
归档时间: |
|
查看次数: |
87465 次 |
最近记录: |