javax.faces.PROJECT_STAGE的使用

时间:2013-10-05 04:20:39

标签: jsf model-view-controller jsf-2 web jsf-1.2

我想了解'javax.faces.PROJECT_STAGE'属性对JSF应用程序的影响。下面的链接中提供了一个很好的用例

http://css.dzone.com/news/jsf-20-new-feature-preview-ser
http://www.java-tutorial.ch/java-server-faces/jsf-project-stage

除了提供验证错误消息之外,还有其他用例,这个属性真的有用吗?我知道我们可以检查这个变量来识别环境并改变某些功能,但是JSF会自动帮助开发人员吗?如果你能分享你项目的经验会很棒吗?

5 个答案:

答案 0 :(得分:17)

将此参数设置为Development可以实现更好的错误消息,包括在客户端JavaScript中,但会以某些性能为代价。

将此参数设置为Production会关闭一些错误消息,并emphasize performance

来源:
JSF 2.0 Reminder: Project Stage

答案 1 :(得分:4)

根据comment wutzebaer this linked postjavax.faces.PROJECT_STAGE属性可以控制某些功能是否已启用(例如资源缓存)。

答案 2 :(得分:1)

当我们将PROJECT_STAGE设置为生产时,我们将获得更好的错误消息,例如当我们错过输入字段周围的h:form标签时,当阶段设置为开发时以及当阶段设置为生产时,我们可能会收到以下错误消息(或者除了开发之外的任何其他值)我们都不会收到任何错误消息。

  

表单组件需要在其祖先中具有UIForm。建议:   在<h:form>

中包含必要的组件

答案 3 :(得分:1)

开发过程中资源的缓存清除

通过资源,我指的是静态资源,例如样式表,javascript库,徽标和象形图等。

默认情况下,资源加载时没有任何缓存过期(在最大使用期限内过期)。之所以这样,是因为假定资源是静态的,因为它们在Servlet容器的生命周期内不会改变。通过在客户端上缓存这些资源(Web浏览器缓存),我们可以从中受益。

但是,在发布可能包装一组资源的库的新版本时,我们不希望用户陷入旧版本的资源中。通常情况下,根据规范,实现将自动以库名称和版本作为查询属性后缀资源。典型资源将自动输出为:

<link type="text/css" rel="stylesheet" href="/nqp-web/javax.faces.resource/components.css.xhtml?ln=primefaces&amp;v=6.2">

这是通过使用Resource的特定实现来处理的。

因此,当您发布新版本的库时,您的用户将不会卡在缓存中的旧版本资源。

但是,在开发工作期间,该版本不会增加,但是您仍希望缓存过期,最好立即过期。

默认实现通常是确保根据javax.faces.PROJECT_STAGE的值(具体为DEVELOPMENT),将expire设置为即时。例如,您可以在Mojarra的ResourceImpl中看到它:

long expiresTime;
if (FacesContext.getCurrentInstance().isProjectStage(Development)) {
  expiresTime = new Date().getTime();
} else {
  expiresTime = new Date().getTime() + maxAge;
}

记录

如@vrcca所述,使用isProjectStage的{​​{3}}显示,当设置为DEVELOPMENT时,这几乎只是打开了额外的日志记录。


参考

答案 4 :(得分:0)

将PROJECT_STAGE设置为开发的另一个功能是,我们还可以在不重新启动服务器的情况下查看.xhtml文件中的更改。