【问题标题】:Glassfish 3: cannot set javax.faces.PROJECT_STAGE to "production"Glassfish 3:无法将 javax.faces.PROJECT_STAGE 设置为“生产”
【发布时间】:2011-07-14 14:20:20
【问题描述】:

我,试图在我的 web.xml 中将 javax.faces.PROJECT_STAGE 设置为“生产”,但在运行时我看到,该值始终是“开发”。调试显示非常奇怪的事情,无法解决问题。在 GF 3.0.1 和 GF 3.1 上都尝试过 - 相同。

这是我的 web.xml 片段:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/applicationContext*.xml</param-value>
</context-param>
<context-param>
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
    <param-value>/WEB-INF/rstk-tag.taglib.xml</param-value>
</context-param>
<context-param>
    <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>rstk.DOWNLOAD_PATH</param-name>
    <param-value>c:\glassfish3.1\downloads</param-value>
</context-param>
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Production</param-value>
</context-param>

还有这个

FacesContext.getCurrentInstance().getApplication().getProjectStage()

总是返回发展!

感谢任何帮助,这对我来说是真正的障碍,因为 GF 3.1 中的 JSF 2.1 在开发模式下会导致令人沮丧的警告..

【问题讨论】:

    标签: jsf-2 glassfish-3 jrebel


    【解决方案1】:

    好的,我终于找到了这个员工的真正原因。

    是杰瑞贝尔。由于某些原因,他们强制 jsf 使用 DEVELOPMENT 模式。有关更多详细信息,您可以查看http://java.net/jira/browse/JAVASERVERFACES-2079?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel - cmets 块。对方也遇到了同样的问题,终于找到了核心原因。

    希望对大家有所帮助。

    【讨论】:

      【解决方案2】:

      不是解决方案,而是一些想法:

      如果您删除项目阶段的上下文参数会怎样?据我记得,如果 web.xml 或 default-web.xml 中没有定义任何内容,那么 Production 应该是默认阶段。

      另一个想法:你的 default-web.xml 在 glassfish/glassfish/config 目录中是什么样子的?

      尝试将 context-param 移动到参数的第一个位置。

      【讨论】:

      • 谢谢,实际上我什么都试过了。由于某些原因,无论如何都设置了“发展”。我也无法回到 3.0.1,因为 3.1 包含对 EJB 的严重修复。请参阅下面的扩展答案
      【解决方案3】:

      我无法修复错误,不知道为什么 WeldApplication 一直返回开发阶段,调试行为有点奇怪,我无法得到真正的原因.. 尝试手动设置 WeldApplicationFactory,但没有结果。最后我做了一个丑陋的解决方法,但它帮助我改变了舞台并摆脱了来自 JSF 的烦人消息(向 Mojarra 团队“问候”)

      首先覆盖 WeldApplicationFactory 以返回您自己的应用程序:

      public class CustomApplicationFactory extends WeldApplicationFactory {
      
      
      
      /**
       * TBD
       * @param delegate
       */
      public CustomApplicationFactory(ApplicationFactory delegate) {
          super(delegate);
          this.delegate = delegate;
      }
      private final ApplicationFactory delegate;
      
      private Application application;
      
      
      @Override
      public void setApplication(Application application) {
          this.application = application;
          delegate.setApplication(application);
      }
      
      @Override
      public Application getApplication() {
          if (application == null) {
              application = new HuckApplication(delegate.getApplication());
          }
          return application;
      }
      

      }

      然后覆盖 WeldApplication:

      /*
      

      * * 创建于 13.03.2011 * * $项目$ * $工作文件$ * $修订$ */

      公共类 HuckApplication 扩展 WeldApplication {

      /**
       * TBD
       * @param application
       */
      public HuckApplication(Application application) {
          super(application);
          // TODO Auto-generated constructor stub
      }
      
      /**
       * @see javax.faces.application.ApplicationWrapper#getProjectStage()
       */
      @Override
      public ProjectStage getProjectStage() {
          return ProjectStage.Production;
      }
      

      }

      并在 faces-config.xml 中注册您的新 ApplicationFactory。

      这对我有用,虽然这个解决方案一点也不漂亮,但它让我继续我自己的开发,而不是与 Mojarra/Glassfish 错误作斗争:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-18
        • 2016-06-18
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 2013-10-17
        • 1970-01-01
        • 2019-05-11
        相关资源
        最近更新 更多