Краткий ответ : Да, это правильное поведение.
Длинный ответ : Разговор представляет собой «единицу работы», которую необходимо четко разграничить. Это делается с явным вызовом dialog.begin () - как вы уже делаете. Если вы хотите использовать один и тот же разговор более чем для одного запроса, вы должны распространить it - это то, чем вы не делаете: -)
Когда вы распространяете разговор, к запросу добавляется идентификатор разговора. Это сообщает контейнеру, какой разговор нужен. Когда вы просто нажимаете кнопку обновления без идентификатора разговора в своем запросе, для каждого запроса создается новый диалог.
Из документации:
Контекст разговора автоматически
распространяется с любым запросом лиц JSF
(Отправка формы JSF) или перенаправление. Это
не распространяется автоматически с
запросы без лиц, например,
навигация по ссылке.
Если вам нужно распространить его вручную, просто добавьте идентификатор запроса к запросу:
<h:link outcome="/addProduct.xhtml" value="Add Product">
<f:param name="cid" value="#{javax.enterprise.context.conversation.id}"/>
</h:link>
Все это и многое другое объясняется здесь .