<h: dataTable value = # {myBean.xxx}>: getXxx () вызывается так много раз, почему?

Простой кусок кода оdataTable. CentralFeed является SessionScoped Bean, иPostComment такое RequestScoped Bean

<h:form id="table">
    <h:dataTable value="#{CentralFeed.profileComments}" var="item">
        <h:column>
            <h:outputText value="#{item.comment}"/><br/>
            <h:inputTextarea value="#{item.newComment}" rows="2"/><br/>
            <h:commandButton value="Post" action="#{PostComment.postReply(item)}" />
        </h:column>
    </h:dataTable>
</h:form>

внутриCentralFeed.java

private List<NewsFeed> profileComments = null;

public List<NewsFeed> getProfileComments() {
    PhaseId currentPhaseId = FacesContext.getCurrentInstance().getCurrentPhaseId();
    profileComments = scholarBean.findProfileCommentsByUserId(getSelectedUser().getId());
    //model = new ListDataModel<NewsFeed>(profileComments);
    return profileComments;
}

Моя проблема в том чтоgetProfileComments() много звонят.currentPhaseId скажет нам, на каком этапе вызывается метод. Когда страница загружается впервые,getProfileComment обзвонить5 разна этапе 6 -RENDER_RESPONSE, На странице естьinputTextarea, так что я набираю там что-то и нажимаюPost (команда кнопка). затемgetProfileComment позвонить другому12 раз проходя фазу 1-> 4. Каждая фаза вызова этого метода3-4 раза, Затем, после этого, метод установки атрибутаnewComment получить вызов (поэтому setNewComment () получить вызов),getProfileComment получить вызов снова вphase 5, затемpostReply() позвони, тогдаgetProfileComment получить вызов снова для другого5 раз вphase 6, Что здесь происходит? Это должно быть так? Если вы посмотрите на мойgetProfileCommentчерез мой EJBscholarBeanЯ на самом деле запрашиваю базу данных, так что запрашивать базу данных примерно 20 раз, как это очень плохая идея.

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

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