JSF2 с GAE и ViewScoped ManagedBean

Мне удалось получить прототип с JSF2 для работы в Googles AppEngine после этого руководства . Теперь у меня странное поведение с ViewScoped ManagedBean:

@ManagedBean @ViewScoped
public class TestBean implements Serializable
{
  private String text;         //getter/setter
  private List texts;    //getter

  @PostConstruct public void init() 
  {
    texts = new ArrayList();
    texts.add("Test");
    text = new String();
  }

  public void save(ActionEvent ae)
  {  
    texts.add(text);
    text = new String();
  }
}

Это моя страница .xhtml:


  
     
          
               
                  
                   
            
        
        
             
              
           
        
     
  

Это отлично работает с локальным развертыванием (с использованием инструментов Eclipse для GAE), но если я разверну это в GAE, ничего не произойдет если я нажму на кнопку Добавить . Дополнительные тесты с областью действия (в GAE) показывают следующее после нажатия на Добавить :

  • @RequestScoped : введенный текст не исчезает, не добавляется в dataTable
  • @ViewScoped : Введенный текст не исчезает, не добавляется в dataTable
  • @SessionScoped : Введенный текст исчезает, в dataTable всегда есть две записи: «Тест» и последний введенный текст

У меня такие же настройки из учебника

  //web.xml
  javax.faces.STATE_SAVING_METHOD
  server


//appengine-web.xml
true

Обновление 1

Вот результаты дополнительных тестов с аннотацией @ManagedBean @ViewScoped :

Во время первого запроса (или ручного обновления страницы) инициализация @PostConstruct () вызывается метод. Если я нажимаю кнопку , ничего не происходит , запрос к test.jsf регистрируется в журнале движков приложений, но в моем ​​save () журнала нет. метод. Firebug показывает мне POST-запрос к test.jsf и следующий ответ:



  class javax.faces.application.ViewExpiredException
  
     
  
  
  
    {"validationFailed":false}
  

Обновление 2

Я использовал mojarra-2.0.4, но теперь обновился до 2.0.6. Та же проблема, но новое наблюдение: если я очищу все кеши Firefox, исключение ViewExpiredException не появится, но я смогу добавить только 1 элемент в список List . @PostConstruct вызывается только один раз, а не при каждом нажатии на кнопку.

Затем я попробовал myfaces-2.0.7, но получил следующее исключение:

Uncaught exception from servlet
java.lang.NoClassDefFoundError: Could not initialize class
com.google.apphosting.runtime.security.shared.stub.javax.naming.InitialContext

Я не уверен, следует ли мне попробуйте заставить myfaces работать, так как Google явно упоминает mojarra (2.0.4) в своем руководстве.

Ссылки

5
задан Thor 28 August 2011 в 19:38
поделиться