java - 如何使用 EL 3.0 引用静态变量?

标签 java jsf-2 primefaces el tomcat8

我试图在我的 JSF 页面中获取一个静态变量。

我按照 this 上的说明进行操作邮政。我能够使用 Primefaces extension 获取变量,但是,在执行以下操作时,我在 xhtml 中没有得到任何内容。

我有一个常量文件:

public class Test {
    public static final String NAME = "EL Test";
}

在 balusC 的帖子之后,我添加了一个应用程序范围的 bean(但是,每个请求都会调用它):

import java.lang.reflect.Field;
import javax.annotation.PostConstruct;
import javax.el.ELContextEvent;
import javax.el.ELContextListener;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

@ManagedBean(eager = true)
@ApplicationScoped
public class Config {
    @PostConstruct
    public void init() {
        FacesContext.getCurrentInstance().getApplication().addELContextListener(new ELContextListener() {
            @Override
            public void contextCreated(ELContextEvent event) {
                event.getELContext().getImportHandler().importClass("my.package.constants.Test");
                Class<?> clazz = event.getELContext().getImportHandler().resolveClass("Test");
                for (Field field : clazz.getFields()) {
                    System.out.println(field.getName());
                }
                System.out.println("clazz = " + clazz);
                System.out.println(clazz.getPackage());
            }
        });
    }
}

还有我的 xhtml 页面:

<!DOCTYPE html >
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
<h:head>
    <meta charset="utf-8"></meta>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"></meta>
    <meta name="viewport" content="width=device-width, initial-scale=1"></meta>
</h:head>

<h:body>

    <h:outputText value="#{Test}"></h:outputText>
    <h:outputText value="#{Test.NAME}"></h:outputText>

</h:body>
</html>

有什么我遗漏的吗?

最佳答案

p:importConstants 已添加到 PrimeFaces 6.x 中。

XHTML:

<p:importConstants type="com.example.Constants" var="Constants" />

<h:outputText value="#{Constants.TEST}" />

Java:

package com.example;

public class Constants {
    public final static String TEST = "Imported Constant";
}

关于java - 如何使用 EL 3.0 引用静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32511203/

相关文章:

java - 扩展 UIComponentBase 时如何保存状态

jquery - 当我在 primefaces 的 li 上执行 overflow-x hidden 时,我得到一个奇怪的工件,它是什么,为什么?

Java删除重复数据

java - sling :resourceSuperType is impacting sling resolution?怎么样

java - 使用 AWS Java SDK 为现有 S3 对象设置过期 header

java - 使用 Maven 安装 Java ZeroMQ 绑定(bind) (jzmq),缺少 native 代码库

java - 有没有办法在 JSF 应用程序中使用 Spring 注入(inject) HttpSession?

jsf-2 - 如何使用 JSF 设置 HTTP 状态码?

javascript - 如何更改 PrimeFaces onclick 按钮中的选项卡?

jsf - 如果 value 属性 <p :selectOneMenu> and <h:outputText> is different,Primefaces DataTable 不会使用下拉框更新显示值