jsf 2应用程序范围bean initiliazed fron faces-config.xml

时间:2013-08-08 23:19:29

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

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

这是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打印)

1 个答案:

答案 0 :(得分:3)

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

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

你有两个选择:

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

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