JSF / Seam - новый экземпляр компонента при отправке? - PullRequest
1 голос
/ 23 марта 2010

И моя путаница с JSF продолжается. Это продолжение вопроса, заданного вчера , но я чувствую, что он требует нового вопроса. У меня есть один компонент шва, который ожидает ввода параметра URL для получения List<String> из метода. Это отлично работает при первой навигации по странице. List используется для отображения множества различных selectOneRadio групп, которые заполняют <h:form/>.

Теперь при отправке я не могу получить параметр URL, который будет введен или иным образом установлен в компоненте! Добавление <h:inputHidden/> вызывает исключение FacesException.

Затем я попытался установить List в качестве переменной экземпляра для объекта, и когда последующий вызов выполняется для отправки (что я также не понимаю, почему это делается), я проверяю, является ли переменная -null: если это не так, верните его.

Теперь я обнаружил, что новый экземпляр компонента создается при отправке !!!

getList() called
this.toString(): .BeanAction@5fd98420

#### This is when submit is clicked
getList() called
this.toString(): .BeanAction@22aacbce

Компонент имеет следующие аннотации:

Stateful
@Scope(ScopeType.CONVERSATION)
@Name("bean")
@Restrict("#{identity.loggedIn}")

Может кто-нибудь объяснить, почему создается новый экземпляр компонента? Я действительно не совсем уверен, как справиться с этим. Я думал, что скрытый параметр будет работать, потому что именно так я буду делать это с простым HTML, и я немного удивлен, что он не работает для JSF / Seam.

Ответы [ 2 ]

2 голосов
/ 23 марта 2010

Я нашел решение, но все еще не понимаю, почему оно требуется. Добавив <S:conversationId/> к тегу <h:commandButton/>, я получаю разговор, который распространяется по отправке формы.

Однако в документации по шву говорится:

If you don't do anything special, a non-faces request  (a GET request for example)
will not propagate the conversation context and will be processed in a new 
temporary conversation.

Это означает, что Seam / JSF рассматривал отправку моей формы как "запрос не для лиц". Почему это так?

0 голосов
/ 23 марта 2010

Когда вы входите на страницу (или после отправки), видите ли вы идентификатор разговора в URL? Я обеспокоен тем, что, возможно, разговор о шве инициализируется неправильно.

...