<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 раз, как это очень плохая идея.