我正在使用Java及其框架(Spring 3.1.1)开发Web应用程序.而且我尽量避免使用scriptlet,但是我找不到定义数组的方法: % String[] alphabet = {"A", "B", "C", ... , "Z"}; pageContext.setAttribute("alphabet", alphab
<% String[] alphabet = {"A", "B", "C", ... , "Z"}; pageContext.setAttribute("alphabet", alphabet); %>
设置pageContext属性后,我可以使用${alphabet}.但是我想知道,是否可以使用纯JSTL / EL来创建数组?
更新:我正在使用此数组来创建链接.例如,如果用户点击“S”,则名字以’S’开头的员工名单来了.所以,而不是逐个创建链接我正在迭代${alphabet}.
如果你已经在EL 3.0,它支持新的 operations on collection objects,你可以使用${[…]}语法构造一个列表和${{…}}语法来构造一个集合.<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" />
如果您还没有使用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" />
但是我同意,您最好使用普通的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. } }
它将透明地在webapp的启动时自动注册,并将所需的数据放在应用范围内.