我试图在我的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会在开发模式中导致令人沮丧的警告。
答案 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错误挣扎:)