我正在寻找使用JNDI配置在Glassfish(v4.1.1 build 1)上设置项目阶段,以允许我的服务器拥有每个,不同的项目阶段,并允许我使用Git推送修改而不更改javax.faces.PROJECT_STAGE在每次推送时都在web.xml中。
我已经尝试了this post中的内容,但似乎它不起作用,可能是因为它与Glassfish版本不同。
web.xml中的(在我的项目中)
<resource-ref>
<res-ref-name>jsf/ProjectStage</res-ref-name>
<res-type>java.lang.String</res-type>
<mapped-name>javax.faces.PROJECT_STAGE</mapped-name>
</resource-ref>
在domain.xml(我的服务器使用的域)
<custom-resource factory-class="com.sun.faces.application.ProjectStageJndiFactory" res-type="java.lang.String" jndi-name="javax.faces.PROJECT_STAGE">
<property name="stage" value="Development"></property>
</custom-resource>
我也尝试使用<property name="value" value="Development"></property>
代替name="stage"
。
但是,当我显示#{facesContext.application.projectStage}
时,它显示为Production
,因为它看起来是默认阶段。
希望你能帮助我,谢谢!
答案 0 :(得分:0)
解决了我的问题!
似乎在手动编辑domain.xml
文件时创建JNDI资源并不能正确创建资源,如我所解释的here。
因此,它可以与使用asadmin命令创建的JNDI自定义资源一起正常工作。
JNDI自定义资源创建命令
create-custom-resource --restype java.lang.String --factoryclass com.sun.faces.application.ProjectStageJndiFactory --property "stage=Development" javax.faces.PROJECT_STAGE
web.xml
<resource-ref>
<res-ref-name>jsf/ProjectStage</res-ref-name>
<res-type>java.lang.String</res-type>
<mapped-name>javax.faces.PROJECT_STAGE</mapped-name>
</resource-ref>