【问题标题】:jsf 2 application scope bean initiliazed fron faces-config.xmljsf 2 应用程序范围 bean 从 faces-config.xml 初始化
【发布时间】:2013-08-10 20:42:41
【问题描述】:

我想从 faces-config.xml 初始化 bean 的属性(应用程序范围)。我尝试了不同的配置但没有成功。在库级别,我使用的是 jsf 2.2 - jboss-jsf-api_2.2_spec.jar。在项目级别 faces-config 配置为 2.0 版本。我不知道这是否是问题所在。 JBDS 7 不允许我因为与其他 Project Facets 冲突而更改为 2.2。

这是 faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">      
    <managed-bean>
        <managed-bean-name>appBean</managed-bean-name>
        <managed-bean-class>package.ApplicationBean</managed-bean-class>
        <managed-bean-scope>application</managed-bean-scope>
        <managed-property>
            <property-name>cookieNameLocale</property-name>
            <property-class>java.lang.String</property-class>
            <value>someText</value>
        </managed-property>
        <managed-property>
            <property-name>debug</property-name>
            <property-class>boolean</property-class>
            <value>true</value>
        </managed-property>
    </managed-bean>
    <application>
        <locale-config>
            <default-locale>xx_XX</default-locale>
            <supported-locale>xx_XX</supported-locale>
        </locale-config>
        <resource-bundle>
            <base-name>locale</base-name>
            <var>i18n</var>
        </resource-bundle>
     </application>
</faces-config>

这是应用范围 bean:

public class ApplicationBean implements Serializable {

    private boolean debug;
    private String cookieNameLocale;

    //respectively getters and setters
}

当@Inject appBean 到另一个会话范围 bean 时,属性不会被初始化。没有错误并且在会话bean之前创建了appBean(使用@PostConstruct打印)

【问题讨论】:

    标签: jsf-2 initialization managed-bean faces-config managed-property


    【解决方案1】:

    faces-config.xml 中的&lt;managed-bean&gt; 条目基本上声明了一个新的@ManagedBean。 IE。一个 JSF 托管 bean。但是,使用@Inject,您基本上是在注入一个 CDI 托管 bean。

    这是管理 bean 的两种相互排斥的方式。实际上,您最终得到了同一个 bean 类的 2 个实例,一个由 JSF 通过faces-config.xml 管理,另一个由 CDI 通过注释管理。只有由 JSF 管理的那个才设置了这些属性。

    你有两个选择:

    1. 使用 @ManagedProperty 将其作为 JSF 托管 bean 注入。然而,这反过来又要求接受器本身也是一个 JSF 托管 bean。

    2. 完全忘记faces-config.xml 方法。在web.xml 或服务器配置中将它们定义为JNDI 资源并使用@Resource 注入它们。或者,将它们定义为.properties 文件设置或web.xml 中的&lt;context-param&gt; 条目。 CDI 没有提供直接注入它们的方法,但可以使用 CDI Producer 创建自定义注释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      相关资源
      最近更新 更多