2014-02-11 4 views
1

Я видел эту ошибку, описанную во многих местах, но всегда причины разные. Сообщение вроде this утверждает, что проблема повторного создания экземпляра возникает только при включении библиотеки тэгов-обработчиков на вашу страницу. Тем не менее, у меня есть пустой проект со страницей, как следующийJSF-ViewScope bean restantiated в каждом запросе

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core"> 
    <head> 
     <title></title> 
    </head> 
    <body > 

    <h:form> 
     <f:view > 
      <h:commandButton id="otxMainPanelTextBt" value="click" 
          action="#{otherController.doSome}"/> 
     </f:view> 
    </h:form> 

</body> 
</html> 

с поддержкой фасоли, как этот

import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 


@ManagedBean(name = "otherController") 
@ViewScoped 
public class Other implements Serializable { 

    private static final long serialVersionUID = -6493758917750576706L; 

    public String doSome() { 
     System.out.println(this); 
     return ""; 
    } 
} 

И следующие зависимости

<dependency> 
    <groupId>org.apache.myfaces.core</groupId> 
    <artifactId>myfaces-impl</artifactId> 
    <version>2.0.2</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.myfaces.core</groupId> 
    <artifactId>myfaces-api</artifactId> 
    <version>2.0.2</version> 
</dependency> 

и каждый раз, когда я нажимаю на кнопка создает другой объект. По-видимому, эта страница максимально проста, и я не вызвал ни одной из возможных причин ошибок, так что это всегда происходит или я чего-то не хватает?

Я тестировал изменение зависимостей до 2.2.0, и он работает как ожидалось, но, к сожалению, из-за ограничений проекта, мне нужно сохранить версию 2.0.2 JSF.

Любая помощь будет высоко оценена. Спасибо!

+1

Возможно, вы уже ответили на свой вопрос, и это ошибка. – zmirc

+0

У меня эта проблема с websphere. Так что я делаю «обходной путь», чтобы остановить постконструкцию огня при каждом обновлении ... http://stackoverflow.com/a/21159145/3056912 : – xild

+0

2.0.2 - это ранняя стадия реализации 2.x. 2.0.20 и 2.1.14 уже доступны, пойдите с одним из них. Они должны работать без внесения изменений в ваш код. –

ответ

0

Фактически, я обнаружил, что экземпляр остается прежним. Проблема заключалась в том, что при нажатии кнопки я всегда видел разные хэш-коды, напечатанные в toString метода, подобного этому.

constructing the instance 
[email protected] 
[email protected] 
[email protected] 

, и это привело меня к мысли, что были разные случаи.

Хотя это тот же экземпляр, я считаю, что это поведение неверно, потому что хеш-код объекта не должен меняться в течение его жизненного цикла.

+1

Экземпляр объекта _is_ меняется. Идентификатор hashCode останется прежним. Вероятно, ваш объект просмотра будет сериализован [StateManager] (http://docs.oracle.com/javaee/7/api/javax/faces/application/StateManager.html) между запросами. – McDowell

Смежные вопросы