如何从视图/内部代码访问 javax.faces.PROJECT_STAGE?
Posted
技术标签:
【中文标题】如何从视图/内部代码访问 javax.faces.PROJECT_STAGE?【英文标题】:How to access javax.faces.PROJECT_STAGE from the view/inside code? 【发布时间】:2011-03-24 19:00:54 【问题描述】:[我的设置:Java EE 6 应用程序,在 Glassfish 3.0.1 上运行 EJB3.1、CDI/Weld、JSF2]
我刚刚在this page 上阅读了有关 Faces ProjectStage 的信息,这是一件很酷的事情。所以我在我的 Web.xml 中对其进行了配置,将其设置为 Development:
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
现在我想从 JSF 视图访问 ProjectStage(相应地设置特定 UI 组件的可见性)。
因此,我已经尝试了诸如值为#javax.application.projectStage
的输出文本之类的东西,它似乎为空,并且我还尝试了许多其他变体,但均未成功。我什至无法从 Java 代码中访问 ProjectStage(然后我可以自己用 Bean 公开它)。
如何在我的应用程序中访问 PROJECT_STAGE 值?
【问题讨论】:
【参考方案1】:您可以使用 initParam 预定义的 JSF EL 变量来获取它
#initParam['javax.faces.PROJECT_STAGE']
【讨论】:
只有在没有定义上下文参数时才会返回null
。此外,不包括项目阶段由 JNDI 设置的情况。我更喜欢 #facesContext.application.projectStage
,因为它返回 JSF 实际使用的最终值,无论它在哪里配置。
我确认如果您使用 JNDI 设置项目阶段,此答案将不起作用。【参考方案2】:
知道了。从视图中可以这样访问:
<h:outputText value="Stage:#facesContext.application.projectStage"/>
在代码中可以这样访问:
FacesContext.getCurrentInstance().getApplication().getProjectStage().toString()
【讨论】:
【参考方案3】:这可能是通过initParam
implicit object 暴露的。如果失败,请检查ExternalContext。
【讨论】:
以上是关于如何从视图/内部代码访问 javax.faces.PROJECT_STAGE?的主要内容,如果未能解决你的问题,请参考以下文章
javax.faces.application.ViewExpiredException:无法恢复视图
jsf 覆盖默认 javax.faces.STATE_SAVING_METHOD 以获得具体视图
查看范围:java.io.NotSerializableException: javax.faces.component.html.HtmlInputText
java.lang.NoClassDefFoundError: javax/faces/model/SelectItem
CDI @Named bean 中的 @javax.faces.bean.ManagedProperty 返回 null
java.lang.ClassFormatError:类文件 javax/faces/webapp/FacesServlet 中非本机或抽象方法中的缺失代码属性