Glassfish 3: невозможно установить javax.faces.PROJECT_STAGE в рабочую среду

Я пытаюсь установить javax.faces.PROJECT_STAGE на «производство» в моем web.xml, но во время выполнения я вижу, что значение всегда «разработка». Отладка показывает очень странные вещи, не могу разобраться.. Пробовал и на 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()

всегда возвращает развитие!

Любая помощь приветствуется, это настоящая остановка для меня, поскольку JSF 2.1 в GF 3.1 приводит к разочаровывающему предупреждению в режиме разработки.


person bitec    schedule 13.03.2011    source источник


Ответы (3)


Хорошо, наконец-то я нашел настоящую причину этого посоха.

Это Жребель. По некоторым причинам они форсируют режим РАЗРАБОТКИ для jsf. Для получения дополнительной информации см. http://java.net/jira/browse/JAVASERVERFACES-2079?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel — блок комментариев. У другого человека была такая же проблема, и он, наконец, узнал основную причину.

Надеюсь, это поможет всем.

person bitec    schedule 15.06.2011

Не решение, а некоторые идеи:

Что, если вы удалите параметр контекста для стадии проекта? Насколько я помню, Production должна быть стадией по умолчанию, если ничего не определено в web.xml или default-web.xml.

Еще одна идея: как выглядит ваш default-web.xml в каталоге glassfish/glassfish/config?

Попробуйте переместить параметр контекста на самую первую позицию параметров.

person Matt Handy    schedule 15.03.2011
comment
Спасибо, на самом деле я пробовал все. По некоторым причинам разработка все равно была задана. Я также не мог вернуться к 3.0.1, так как 3.1 содержит серьезное исправление для EJB. Смотрите мой расширенный ответ ниже - person bitec; 16.03.2011

Я не мог исправить ошибку, не знаю, почему 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 * * $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;
}

}

и зарегистрируйте новую ApplicationFactory в файлеfaces-config.xml.

Это сработало для меня, хотя это решение совсем не красивое, но оно позволяет мне двигаться в своем собственном развитии, а не бороться с ошибками Mojarra/Glassfish :)

person bitec    schedule 16.03.2011