Простой кусок кода о 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
(кнопка command). Затем getProfileComment
будет вызван другой 12 раз , проходящий фазу 1-> 4. На каждом этапе вызывайте этот метод 3-4 раза . Затем, после этого, метод установки атрибута newComment
получает вызов (поэтому setNewComment () получает вызов), getProfileComment
снова получает вызов на phase 5
. Затем postReply()
получить вызов, затем getProfileComment
получить вызов еще раз для 5 раз при phase 6
. Что здесь происходит? Это должно быть так? Если вы посмотрите на мой getProfileComment
через мой EJB scholarBean
, я на самом деле опрашиваю базу данных, так что запросить базу данных примерно 20 раз, как это, очень плохая идея.