21

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

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

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

4

5 回答 5

26

设置此参数以Development启用更好的错误消息,包括在客户端 JavaScript 中,但会牺牲一些性能。

将此参数设置为Production将关闭一些错误消息,并强调性能

来源:
JSF 2.0 提醒:项目阶段

于 2014-07-15T14:23:49.990 回答
5

根据commentwutzebaer对此链接帖子的说法,该javax.faces.PROJECT_STAGE属性可以控制是否启用某些功能(例如资源缓存)。

于 2014-03-10T22:57:11.137 回答
2

当我们将 PROJECT_STAGE 设置为生产时,我们会收到更好的错误消息,例如,当我们错过输入字段周围的 h:form 标记时,当阶段设置为开发和阶段设置为生产(或任何除了 Development 之外的值)我们不会收到任何错误消息。

表单组件需要在其祖先中有一个 UIForm。建议:将必要的组件包含在<h:form>

于 2014-08-26T06:38:21.920 回答
2

开发期间的资源缓存清除

通过资源,我指的是静态资源,例如样式表、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 已经提到的,快速搜索of 的用法会isProjectStage发现,当设置为DEVELOPMENT.


参考

于 2018-10-20T01:02:53.117 回答
0

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

于 2017-11-17T12:32:44.930 回答