Jsf 2 Glassfish 3:无法将javax.faces.PROJECT_STAGE设置为";生产";
我试图在我的web.xml中将javax.faces.PROJECT_STAGE设置为“production”,但在运行时,我发现其值始终是“development”。调试显示出非常奇怪的事情,无法达到这种情况。。在GF 3.0.1和GF 3.1上都试过-相同 下面是my web.xml的一部分:Jsf 2 Glassfish 3:无法将javax.faces.PROJECT_STAGE设置为";生产";,jsf-2,glassfish-3,jrebel,Jsf 2,Glassfish 3,Jrebel,我试图在我的web.xml中将javax.faces.PROJECT_STAGE设置为“production”,但在运行时,我发现其值始终是“development”。调试显示出非常奇怪的事情,无法达到这种情况。。在GF 3.0.1和GF 3.1上都试过-相同 下面是my web.xml的一部分: <context-param> <param-name>contextConfigLocation</param-name> <param-v
<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>
永远回报发展
感谢您的帮助,这对我来说是一个真正的障碍,因为GF 3.1中的JSF 2.1在开发模式中会导致令人沮丧的警告。不是一个解决方案,而是一些想法: 如果删除项目阶段的上下文参数会怎么样?就我所记得的,如果web.xml或default-web.xml中没有定义任何内容,那么生产应该是默认阶段 另一个想法:glassfish/glassfish/config目录中默认的web.xml是什么样子
尝试将上下文参数移动到参数的第一个位置。我无法修复该错误,不知道为什么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;
}
/*
}
然后覆盖该应用程序:
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;
}
/*
*
*创建于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 bug抗争:)好的,最后我找到了这个员工的真正原因 是Jrebel。出于某些原因,它们强制使用jsf的开发模式。有关更多详细信息,请参见-注释块。另一个人也有同样的问题,最终找到了核心原因
希望这对大家都有帮助。谢谢,实际上我什么都试过了。出于某些原因,“开发”被设定为“无论如何”。我也不能回到3.0.1,因为3.1包含了对EJB的严重修复。请参阅下面我的扩展答案