Проблема с PrimeBaces 6.1 commandButton при работе с @ConversationScoped - PullRequest
0 голосов
/ 26 апреля 2018

Java 1.7 / JSF 2 / JPA 2 / PrimeFaces 6.1

Я рефакторинг моего приложения для использования @ConversationScoped. У меня есть компонент поддержки, который позволяет пользователю выбирать количество объектов после предоставления некоторых аргументов поиска. Для каждой строки в итоговом листинге у меня есть кнопка «Редактировать», с помощью которой можно перейти в другое представление.

Все работало, пока аннотируемый компонент не получил @ConversationScoped. После этого каждый раз, когда пользователь нажимает любую из кнопок редактирования, страница поиска просто перезагружается, и навигация не происходит.

Метод редактирования, связанный с кнопкой редактирования, больше не вызывается.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Я не добавил параметр кнопки cdi . Чтобы решить проблему, моя кнопка должна была выглядеть примерно так:

<p:commandButton title="Edit"
                 action="#{myMB.nextView}"
                 ajax="false">
    <f:param name="id" value="#{bean.id}"/>
    <f:param name="cid" value="#{myMB.conversation.id}"/>
</p:commandButton>

Обратите внимание на параметр cid , его не было, когда у меня возникла описанная проблема.

0 голосов
/ 27 апреля 2018

Вы пометили беседу как постоянную с помощью беседы # begin ()?

Диалог CDI по умолчанию является «временным», что означает, что он ведет себя так же, как бин @RequestScoped.

Если у вас есть поддерживающий боб, просто введите в него Разговор:

private @Inject Conversation conversation;

Затем вызовите conversation.begin() в вашем действии, которое должно открыть разговор.

Будьте осторожны и обратите внимание, что вам также необходимо явно end() ваш разговор!

Гораздо более простой способ справиться с этим в вашем коде может заключаться в использовании Apache DeltaSpike @ViewAccessScoped. Это своего рода «авто-разговор». Контекстный экземпляр будет оставаться активным до тех пор, пока вы к нему обращаетесь. Как только вы уйдете и больше не трогаете его, он будет уничтожен.

Это, кстати, также касается нескольких вкладок браузера. У нас даже есть отдельная область для этого: @WindowScoped. Это дает вам отдельные экземпляры для каждой вкладки браузера! Может также хорошо работать в вашем случае использования.

...