我想了解'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会自动帮助开发人员吗?如果你能分享你项目的经验会很棒吗?
答案 0 :(得分:17)
将此参数设置为Development
可以实现更好的错误消息,包括在客户端JavaScript中,但会以某些性能为代价。
将此参数设置为Production
会关闭一些错误消息,并emphasize performance。
答案 1 :(得分:4)
根据comment
wutzebaer this linked post,javax.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&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文件中的更改。