Bean-компонент ViewScoped реконструируется при каждой обратной передаче

У меня есть @ViewScoped фасоль

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class MyBean implements Serializable

Он перестраивается при каждой обратной передаче (со всеми очевидными последствиями, такими как потеря исходных свойств). Чем это вызвано и как я могу это решить? Если это не решаемо, есть ли обходные пути?

Я не могу изменить область действия bean-компонента, например, на @SessionScoped по нетехническим причинам.

Настроен следующий метод сохранения состояния:

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param>

Все файлы, связанные с JSF, из моего pom.xml

        <!-- JSF Files -->
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>mojarra-jsf-impl</artifactId>
        <version>2.0.0-b04</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.2.12</version>
    </dependency>

    <dependency>
        <groupId>javax.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.0.2-FCS</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.faces</groupId>
        <artifactId>javax.faces-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

person Danny.    schedule 15.09.2015    source источник
comment
Как выглядит метод обратной передачи, который вы вызываете?   -  person Dawn    schedule 15.09.2015
comment
Дэнни, нет, ты никогда этого не показывал. @Dawn: проблема OP уже возникает до того, как метод будет активирован, иначе проблема возникала бы только каждый второй щелчок. Так что эта часть уже не имеет значения и только добавит отвлекающий шум к вопросу.   -  person BalusC    schedule 15.09.2015
comment
Вы пытались опубликовать заголовок этого вопроса в Google и пытались найти причину своей проблемы, прочитав результаты? Или даже прочитать «связанные» вопросы справа в Stackoverflow.   -  person Kukeltje    schedule 15.09.2015
comment
Что ж, страница Как спросить (а также любой how-to-ask-smart-questions), чтобы описать, что вы делали/пытались и почему это не помогло. Поэтому вместо того, чтобы спрашивать меня, что я нашел (несколько возможных причин), пожалуйста, улучшите свой вопрос со своей стороны.   -  person Kukeltje    schedule 15.09.2015
comment
Слишком много возможных причин, и вы не дали никакой подсказки, чтобы исключить одну и другую (что является сигналом того, что вы мало знаете о HTTP и HTML, что беспокоит, учитывая, что JSF тогда в основном будет для вас глубокой дырой) . Вчера я был не в настроении проводить вас рукой по всем возможным причинам. В качестве первого шага, чтобы исключить одно и другое, работает @SessionScoped или нет?   -  person BalusC    schedule 16.09.2015
comment
@SessionScoped выполняет работу со всеми вытекающими последствиями   -  person Danny.    schedule 16.09.2015
comment
В качестве второго шага нажмите F12 в браузере, чтобы открыть набор инструментов веб-разработчика, откройте вкладку Сеть и выполните несколько обратных передач в той же форме (с сохранением журнала). Обратите внимание на параметр запроса javax.faces.ViewState в полезных данных формы. Является ли его значение одинаковым для последующих обратных передач?   -  person BalusC    schedule 16.09.2015
comment
Значение меняется javax.faces.ViewState:5009729732090143156:-8654254684322543083 javax.faces.ViewState:5009729732090143156:-1247411320451084082 javax.faces.ViewState:5009729732090143156:-6939382571533866801   -  person Danny.    schedule 16.09.2015
comment
Это происходит и с этим Hello World Example? (кстати, если несколько других пользователей прокомментировали сообщение, никто больше не будет получать уведомления, пока вы не нацелите одного из них с помощью @nickname; в противном случае вы зависите от того, будет ли кто-то оглядываться назад позже, если есть любые новые комментарии к посту)   -  person BalusC    schedule 16.09.2015
comment
@BalusC да, также на этой странице изменяется параметр состояния просмотра   -  person Danny.    schedule 16.09.2015
comment
Какую марку/версию сервера вы используете и какие файлы JAR у вас есть в папке /WEB-INF/lib развернутого файла WAR?   -  person BalusC    schedule 16.09.2015
comment
@BalusC Tomcat 7.0.47, я вставил свой pom.xml в вопрос.   -  person Danny.    schedule 16.09.2015
comment
Зависимости JSF - это беспорядок. Они не совпадают со всеми четырьмя. Избавьтесь от всех этих четырех зависимостей JSF и используйте единственный org.glassfish:javax.faces зависимость от последней версии (в настоящее время 2.2.12).   -  person BalusC    schedule 16.09.2015
comment
@BalusC Я только что обновился до 2.2.12. К сожалению, теперь я столкнулся со следующим сообщением об ошибке SEVERE: JSF1094: Could not decode flash data from incoming cookie value Invalid characters in decrypted value. Processing will continue, but the flash is unavailable for this request., сначала я должен его решить. Я скоро вернусь к вам, как только это решится. большое спасибо   -  person Danny.    schedule 16.09.2015
comment
Хранилище файлов cookie вашего браузера тоже запутано из-за всех этих старых и смешанных зависимостей, которые ранее были ошибки области действия Flash. Просто очистите все файлы cookie или создайте окно инкогнито.   -  person BalusC    schedule 16.09.2015


Ответы (1)


Это не имеет смысла.

<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>mojarra-jsf-impl</artifactId>
    <version>2.0.0-b04</version>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.2.12</version>
</dependency>
<dependency>
    <groupId>javax.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.0.2-FCS</version>
</dependency>
<dependency>
    <groupId>javax.faces</groupId>
    <artifactId>javax.faces-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
</dependency>

Избавьтесь от них всех. Они несовместимы друг с другом. Это может иметь много последствий, одним из которых является сломанная область просмотра.

Чтобы использовать Mojarra на Tomcat, просто скачайте единственный org.glassfish:javax.faces зависимость.

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.faces</artifactId>
    <version><!-- Check javaserverfaces.java.net for latest version --></version>
</dependency>

Последняя стабильная версия 2.2.x на данный момент — 2.2.12.

Связанные потенциальные причины:

person BalusC    schedule 16.09.2015