JSF 2.0: почему мои компоненты ViewScope Beans воссоздаются, хотя все еще находятся в том же представлении [дубликат]

На этот вопрос уже есть ответ здесь:

@ViewScoped вызывает @PostConstruct при каждом запросе обратной передачи 1 ответ

На моей странице .xhtml у меня есть следующая форма:

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
            template="./../template/CustomerTemplate.xhtml"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:f="http://java.sun.com/jsf/core"
            xmlns:p="http://primefaces.prime.com.tr/ui">

    <ui:define name="formContent">
        <h:form> 
            <p:dataGrid var="item" value="#{mrBean.items}" columns="3">
                <p:column>
                    <p:panel header="#{item.name}">
                        <h:panelGrid columns="1" style="width:100%">
                            ...
                            <h:commandButton value="Add To Cart" actionListener="#{cartBean.addItem(item.id)}" />
                            ...
                        </h:panelGrid>
                    </p:panel>
                </p:column>
            </p:dataGrid> 
        </h:form> 
    </ui:define>

</ui:composition>

CustomerTemplate.xhtml - это:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui">
    <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        ... // import css, js files
    </h:head>

    <h:body>
        ... // Other things on the page
        <div class="grid_9 content">
            <ui:insert name="contentTitle"></ui:insert>
            <ui:insert name="formContent"></ui:insert>
        </div>
        ...
    </h:body>
</html>

И это мой ManagedBean:

@ManagedBean
@ViewScoped
public class MrBean {
    ...
    private List<ItemState> items;
    ...

    @PostConstruct
    public void prepareItemList() {
        ...
        Map<String,String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
            partnerID = Long.parseLong(params.get("partnerID"));
        ...
    }
}

Как видите, мой MrBean - это ViewScoped ManagedBean. Я ожидал, что функция @PostContruct будет вызываться только один раз, когда страница будет отображаться первой. Однако, когда я нажимаюAdd To Cart Кнопка, я столкнулся с нулевым исключением в строкеLong.parseLong(params.get("partnerID")) хотя я все еще нахожусь в том же виде.

Я был бы очень признателен, если бы кто-нибудь мог дать мне совет, как решить эту проблему.

ОБНОВИТЬ: Мне удалось заставить функцию работать, оборачиваяcommandButton внутриajax пометить как следующее:

...
<f:ajax listener="#{cartManagedBean.addItem(item.id)}">
    <h:commandButton value="Add To Cart" /> 
</f:ajax>
....

Ответы на вопрос(1)

Ваш ответ на вопрос