Мне удалось получить прототип с 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) в своем руководстве.
Ссылки