如何从视图/内部代码访问 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 中非本机或抽象方法中的缺失代码属性