arrays - 使用 JSTL 或 EL 创建数组

标签 arrays jsp jstl el scriptlet

我正在使用 Java 及其框架(Spring 3.1.1)开发一个 Web 应用程序。我试图尽可能避免使用 scriptlet,但是我找不到除此之外的其他方法来定义数组:

<%
    String[] alphabet = {"A", "B", "C", ... , "Z"};
    pageContext.setAttribute("alphabet", alphabet);      
%> 

设置 pageContext 属性后,我可以将其与 ${alphabet} 一起使用。但我想知道,是否可以使用普通的 JSTL/EL 来创建数组?

更新:我正在使用此数组来创建链接。例如,如果用户单击“S”,则会出现名字以“S”开头的员工列表。因此,我不是逐一创建链接,而是迭代 ${alphabet}

最佳答案

如果您已经使用 EL 3.0(Tomcat 8+、WildFly 8+、GlassFish 4+、Payara 4+、TomEE 7+ 等),它支持新的 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.
    }

}

它将在 Web 应用程序启动时透明地自动注册自身,并将所需的数据放入应用程序范围内。

关于arrays - 使用 JSTL 或 EL 创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14454769/

相关文章:

java - 如何在不使用jsp UseBean的情况下使用JSTL标签

java |垃圾收集器如何忽略没有引用的数组内存

c - 执行 typedef 时初始化结构数组

javascript - 如何在YII2中点击按钮后获取表格数组

java - ArrayList 上的 for 循环更改对象

java - jsp可以访问.jar文件吗?

javascript - 返回与重复属性匹配的对象数组

java - Spring MVC 3 - 具有 Map 属性的表单对象在表单提交时未绑定(bind)键/值对

java - JSTL 数组列表。值为空

arrays - 需要帮助使用 <c :forEach> in JSP/JSTL