Бин @ConversationScoped, реконструированный во время постраничной навигации

Я просто обнаружил странное поведение при переходе с одной страницы на другую.

Я использую CDI, Jsf 2.2 API 2.2.8, Omnifaces 2.2, Primefaces 5.2, wildfly 8.2.

Большинство контроллеров и страниц работают должным образом, но некоторые из них, когда я открываю страницу, вызывают метод @PostConstruct, который запускает диалог, а затем, когда я покидаю страницу, снова вызывается @PostConstruct. Я понял, что что-то в page.xhtml является причиной, поэтому я начал искать это. Но это странное поведение в любом случае.

После моего кода и несколько примеров:

Контроллер, который использует методы абстрактного класса, такие как beginconversation() и list()

import javax.inject.Named;
import javax.enterprise.context.ConversationScoped;
@Named
@ConversationScoped
public class PromptConfigurationController extends BaseController<PromptConfiguration> implements Serializable {

    public PromptConfigurationController() {
        super(PromptConfiguration.class);

    }

    @PostConstruct
    public void init() {
        list();
        loadFilters();
    }

}

Абстрактный класс

public abstract class BaseController<T extends BaseEntity> {
  public void list() {
        logger.info("list()");

        items = getService().findAll(entityClass);
        item = null;
        beginConversation();
    }

    protected void beginConversation() {
        logger.info("beginConversation()");

        if (conversation != null && conversation.isTransient()) {
            conversation.begin();
            conversation.setTimeout(CONVERSATION_TIMEOUT);
            logger.info("Conversation iniciada: " + conversation.getId());
        }
    }
}

Некоторые XHTML-страницы, которые я нашел проблему и решение (когда я нашел) было:

Ошибка:

  <f:convertDateTime pattern="#{webChatSearchController.dateHelper.getLocalizedDatePattern()}" />

Метод выше просто вернуть шаблон.

За работой

<f:convertDateTime dateStyle="dd/MM/yyyy" pattern="dd/MM/yyyy" />

Ошибка:

<p:commandButton id="commandButton-active" action="#{satisfactionSurveyController.changeQuestionStatus(true)}" update="form-content" binding="#{satisfactionSurveyController.activeButton}" value="#{bundle['common.active.3.message']}">

За работой:

<p:commandButton id="commandButton-active" action="#{satisfactionSurveyController.changeQuestionStatus(true)}" update="form-content"  value="#{bundle['common.active.3.message']}" disabled="#{satisfactionSurveyController.disableActiveButton}">

Проблема была просто в "связывании".


Ошибка:

<p:dataTable id="dataTable-group-email" var="emailMonitor" value="#{emailMonitorController.listEmailGroup}" selectionMode="single"   rowKey="#{emailMonitor}" filteredValue="#{emailMonitorController.listEmailGroupFiltered}">

За работой:

<p:dataTable id="dataTable-group-email" var="emailMonitor" value="#{emailMonitorController.listEmailGroup}" selectionMode="single"   rowKey="#{emailMonitor}" >

Просто удаление "FilterValue" начал работать. Но без этого я не могу использовать свойства фильтра.


Навигация осуществляется с помощью меню простых лиц, все страницы имеют одинаковую логику:

<p:menuitem id="satisfactionSurvey" action="#{satisfactionSurveyController.listPage}" value="#{bundle[satisfactionSurvey.message']}"  ajax="false" immediate="true">
                            <f:param name="nocid" value="true" />
                        </p:menuitem>

и метод:

public String listPage() {        
        return baseViewPath + "/list.xhtml?faces-redirect=true";
    }

0 ответов

Другие вопросы по тегам