WELD-000321 Не найден разговор для восстановления идентификатора 3 при обновлении страницы

Я получаю сообщение об ошибке при обновлении страницы, отображаемой во время разговора. Как избежать этой ошибки?

Ситуация:

У меня есть 2 JSF-страницы, index.xhtml и age.xhtml.

index.xhtml содержит форму, в которой пользователь вводит дату рождения (свойство базового компонента "bean"). Когда пользователь отправляет форму, age.xhtml отображает возраст в соответствии с датой рождения.

Форма отправляется с перенаправлением:

<h:commandButton value="Submit" action="#{bean.computeAge()}" />

метод computeAge:

conversation.begin();
return "age?faces-redirect=true";

Один и тот же боб "bean" используется на обеих страницах. У этого боба поддержки есть область разговора.

Страница age.xhtml:

Your age: #{bean.age} years

метод getAge:

if (!conversation.isTransient()) {
  conversation.end();
}
return ejb.computeAge(birthdate);

Все в порядке, кроме случаев, когда я обновляю age.xhtml. Затем я получаю это сообщение об ошибке: WELD-000321 Не найден разговор для восстановления для идентификатора 3

URL, отображаемый браузером до и после обновления:http://localhost:8080/tpjsf1/faces/age.xhtml?cid=3

Проблема возникает из-за cid=3 в конце. Можно ли избежать появления страницы ошибки, когда пользователь обновляет age.xhtml?

1 ответ

Ошибка возникает при завершении разговора в методе getAge. В вашем случае разговор должен закончиться, когда вы вернетесь к странице указателя. Чтобы обработать несуществующее исключение разговора, добавьте теги ниже в веб-XML. Это перенаправит исключение на указанную страницу.

<error-page>   
    <exception-type>org.jboss.weld.context.NonexistentConversationException</exception-type>   
    <location>/my-foo-bar-exception-page.xhtml</location>   
</error-page>
Другие вопросы по тегам