1

我,试图在我的 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 在开发模式下会导致令人沮丧的警告..

4

3 回答 3

3

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

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

希望这会对大家有所帮助。

于 2011-06-15T06:49:27.227 回答
0

I could not fix the bug, don't know, why the WeldApplication keeps returning the Development stage, the debug behaved a bit strange and I could not get real reason.. Tried to manually set the WeldApplicationFactory, but no result. Finally I made and ugly workaround, but it helped me to change the stage and get rid of annoying message from JSF ("greetings" to Mojarra team)

First override the WeldApplicationFactory to return your own 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;
}

}

Then override the WeldApplication:

/*

* * Created on 13.03.2011 * * $Project$ * $Workfile$ * $Revision$ */

public class HuckApplication extends 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;
}

}

and register your new ApplicationFactory in faces-config.xml.

This worked for me, though this solution isn't beautiful at all, but it let's me move on my own development, and not struggling with Mojarra/Glassfish bugs :)

于 2011-03-16T05:13:37.560 回答
0

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

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

另一个想法:您的 default-web.xml 在 glassfish/glassfish/config 目录中的外观如何?

尝试将上下文参数移动到参数的第一个位置。

于 2011-03-15T10:05:25.993 回答