当前位置: 首页 > 知识库问答 >
问题:

在Spring/JSF项目中,OmniFaces不检索枚举属性

祁鸿哲
2023-03-14
package util;

public enum IntegerConstants
{
    DATA_TABLE_PAGE_LINKS(10);

    private final int value;

    private IntegerConstants(int con) {
        this.value = con;
    }

    public int getValue() {
        return value;
    }
}

这里给出的常量应该在XHTML页面上检索,如下所示。

<ui:composition template="/WEB-INF/admin_template/Template.xhtml"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:o="http://omnifaces.org/ui">

    <ui:define name="title">Test</ui:define>

    <ui:define name="content">
        <h:form id="form" prependId="true">
            <o:importConstants var="const" type="util.IntegerConstants"/>
            DATA_TABLE_PAGE_LINKS : #{const.DATA_TABLE_PAGE_LINKS.value}
        </h:form>
    </ui:define>
</ui:composition>

这适用于在GlassFish4.0上运行JSF托管bean的企业应用程序。

但是,在使用Spring(4.0GA)、JSF 2.2.6、PrimeFaces 5.0 final、PrimeFaces Extensions 2.0.0 final运行在Tomcat 8.0.3.0上的项目中,同样的事情也不起作用。

这应该与Spring无关。

给定的枚举(其类文件)在应用程序构建文件夹下的WEB-INF/classes文件夹中可用。

很难找出问题的实际原因,因为不会引发错误或异常。浏览器上的页面只是留空,服务器终端上没有什么可看的。

<o:importConstants var="literal" type="util.IntegerConstants"/>
DATA_TABLE_PAGE_LINKS : #{literal.DATA_TABLE_PAGE_LINKS.value}

显然,const值似乎已经被保留在某个地方,但这太难相信了,因为与const值相同的事情在上面提到的另一个应用程序中也能正常工作!

共有1个答案

曾景龙
2023-03-14

这更多地与EL相关,而不是与JSF/Spring/OmniFaces相关。Tomcat使用的Apache EL实现对于保留的关键字确实有很大的限制。例如,#{bean.class.name}(如printbean.getclass().getname())在GlassFish使用的Oracle EL实现中是可能的,但在Tomcat使用的Apache EL实现中则不可能。您应该将其写成#{bean['class'].name}。Apache EL实现也阻止了Java语言规范3.9章中列出的所有其他Java关键字,而EL规范1.17章中没有列出这些关键字。常量确实在其中。

另一方面,建议在常量var中以大写开头。这种约定允许在EL范围内更好地区分托管bean实例和常量引用。它还可以立即解决您的问题,因为constconst不同。

<o:importConstants var="Const" type="util.IntegerConstants" />
DATA_TABLE_PAGE_LINKS : #{Const.DATA_TABLE_PAGE_LINKS.value}

或者只是重命名枚举,var默认值为类#getsimpleName()

<o:importConstants type="util.Const" />
DATA_TABLE_PAGE_LINKS : #{Const.DATA_TABLE_PAGE_LINKS.value}
 类似资料:
  • 我正在尝试在我的JSF应用程序中使用无扩展URL。。。 我已经在使用:https://showcase.omnifaces.org/facesviews/ExtensionlessURLs这很好,但是如果我有一个带有参数的URL,它仍然带有: mypage.jsf?myparameter=12345 这里也有排除的可能性吗。jsf,因此URL将是: 我的页面?参数设置 我知道也有Prettyfac

  • 问题内容: 我已经阅读了Java和C++之间的枚举差异问题?但是我还是很困惑。 我想以下返回相关的字符串: 据我所读,这应该是可能的。只是希望您对如何实现它有所了解。 问题答案: 简短答案 您需要一个构造函数,一个字段和一个吸气剂。 建设者 枚举类型可以具有构造函数,只要它们的访问级别为私有或默认(包私有)即可。除了枚举声明本身之外,您不能直接调用这些构造函数。与类相似,当定义不带参数的枚举常量时

  • 问题内容: 无论如何,通过将其与给定的字符串进行比较来检查是否存在枚举?我似乎找不到任何这样的功能。我可以尝试使用该方法并捕获异常,但是据我了解,捕获运行时异常不是一种好习惯。有人有什么想法吗? 问题答案: 我不认为没有捕获异常的内置方法。您可以改用如下方式: 编辑: 正如乔恩·斯凯特(Jon Skeet)所述,每次调用时,都会通过克隆私有支持数组来工作。如果性能至关重要,则可能只需要调用一次,缓

  • 本文向大家介绍sharepoint项目。从列表中检索项目,包括了sharepoint项目。从列表中检索项目的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 我们有一个带有枚举字段-的实体,我们想使用JPA注释-为它设置默认值。 但是,当我们将实体保存到数据库时,此字段的值为和。对于布尔字段- 正确的默认值()已保存。 如果改为使用:,则会在保存时得到以下异常: 我们做错了什么?为什么它仅适用于布尔值? 问题答案: 当某些SQL代码在未为emailCommunicationStatus列指定任何值的情况下插入一行时,您所做的工作很有用。在这