【问题标题】:Uses of javax.faces.PROJECT_STAGEjavax.faces.PROJECT_STAGE 的使用
【发布时间】:2013-10-12 04:49:19
【问题描述】:

我想了解“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 是否会自动执行其他任何操作来帮助开发人员?如果您能分享您的项目中的经验会很棒吗?

【问题讨论】:

  • 不。差不多就是这样:控制如何记录错误并允许最终开发人员做出决定
  • 谢谢,我又得到了一个:如果项目阶段设置为开发,JSF2.0 会自动将 添加到视图中。
  • 我认为这会自动重新加载 facelets。在开发过程中非常方便!

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


【解决方案1】:

将此参数设置为 Development 可以更好地显示错误消息,包括在客户端 JavaScript 中,但会牺牲一些性能。

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

来源:
JSF 2.0 Reminder: Project Stage

【讨论】:

    【解决方案2】:

    根据 wutzebaer 为this linked post 提供的commentjavax.faces.PROJECT_STAGE 属性可以控制是否启用某些功能(例如资源缓存)。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 有趣,我虽然开发总是更冗长。我想也许在开发阶段,屏幕上的消息会很少,但日志记录(java.util.logging)会更广泛。
      【解决方案4】:

      开发期间的资源缓存清除

      我所说的资源是指静态资源,例如样式表、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,将过期设置为立即。您可以在 Mojarra 的 ResourceImpl 中看到,例如:

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

      记录

      正如@vrcca 已经提到的,quick search 用于isProjectStage 的用法表明,当设置为DEVELOPMENT 时,这主要是打开额外的日志记录。


      参考文献

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 开发过程中 .xhtml 文件的实时更改由就地部署处理。无论如何缓存都不会发生,因为 .xhtml 默认是动态的,并且会被设置为立即过期。
        猜你喜欢
        • 2013-06-06
        • 2012-05-18
        • 2011-07-14
        • 2011-03-24
        • 2018-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多