java - 类的 EL 表达式

标签 java jsp el

我不明白如何在 EL 表达式中表示

我有一个 EL 函数,它接受一个类作为参数(即 Enum 类)来返回可能的枚举值。

我想将它作为 EL 表达式调用。例如。 ${myTld:enumer(com.example.enums.MyEnum)}

但是:

  • 上述语法将 null 作为参数传递
  • 使用 MyEnum.class 会引发异常,例如无法计算表达式

如何在 EL 中表达类而不可能传递其字符串表示形式?

以下作品

<function>
    <description>
        Returns the list of enum values for the given enum class
    </description>
    <name>enumer</name>
    <function-class>com.example.Functions</function-class>
    <function-signature>List enumer(java.lang.String)</function-signature>
</function>

${tld:enumer('com.example.MyEnum')}

我想要什么

    <function-signature>List enumer(java.lang.Class)</function-signature>

最佳答案

你不能用普通的 EL 来表示 Class。如果它是像 ${myTld:enumer(bean.someEnumClass)} 返回 Class<? extends Enum>${myTld:enumer(bean.someEnum['class'])} 那样的 bean 属性,那么您最多可以传递它,其中 someEnum 是实际的 Enum ,但仅此而已。将类名传递为 String 确实是您最好的选择。

如果您已经使用 EL 3.0(可在 Tomcat 8、WildFly 8 等 Servlet 3.1 容器上使用),自定义函数的替代方法是立即将其导入 JSP 中,如下所示,使用新的 EL 3.0 ImportHandler API:

${pageContext.ELContext.importHandler.importClass('com.example.enums.MyEnum')}

然后可以通过 ${MyEnum} 获取该枚举。

<c:forEach items="${MyEnum.values()}" var="myEnumValue">
    ${myEnumValue}<br/>
</c:forEach>

或者,通过 servlet 上下文监听器全局导入 ${MyEnum},如下所示:

@WebListener
public class Config implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        JspFactory.getDefaultFactory().getJspApplicationContext(event.getServletContext()).addELContextListener(new ELContextListener() {
            @Override
            public void contextCreated(ELContextEvent event) {
                event.getELContext().getImportHandler().importClass(MyEnum.class.getName());
            }
        });
    }

    // ...
}

关于java - 类的 EL 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33283260/

相关文章:

java - 如何在 Android 中创建 "fill-up"动画

java - 如何在 liquibase 变更集中设置多个外键?

java - 将映射从 java 迭代到 jsp

javascript - 如何在外部javascript文件中使用EL

java - 如何将 Jpeg2000 (.jp2) 渲染到 ImageView?

java - 从文件插入对象数组

java - Spring mvc 将数据发送到 Controller

javascript - 如何将此 .js 文件转换为 jsp 文件?

jsp - JSP 中立即计算 (${}) 和延迟计算 (#{}) 之间有区别吗?

javascript - 如何在 JavaScript 中从 EL 获取值