Glassfish 3:无法将javax.faces.PROJECT_STAGE设置为“production”

时间:2011-03-13 19:51:31

标签: jsf-2 glassfish-3 jrebel

我试图在我的web.xml中将javax.faces.PROJECT_STAGE设置为“production”,但在运行时我看到,该值始终是“development”。调试显示非常奇怪的事情,无法得到这种情况。试过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会在开发模式中导致令人沮丧的警告。

3 个答案:

答案 0 :(得分:3)

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

这是Jrebel。由于某些原因,他们强制jsf的开发模式。有关详细信息,请参阅http://java.net/jira/browse/JAVASERVERFACES-2079?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel - 注释阻止。另一个人有同样的问题,最后找出了核心原因。

希望这会对每个人有所帮助。

答案 1 :(得分:0)

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

如果删除项目阶段的上下文参数,该怎么办?据我所知,如果在web.xml或default-web.xml中没有定义任何内容,则Production应该是默认阶段。

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

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

答案 2 :(得分:0)

我无法解决这个错误,不知道,为什么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:

/*

*  *创建于2011年3月13日  *  * $ Project $  * $ Workfile $  * $ Revision $  * /

公共类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错误挣扎:)