gpt4 book ai didi

java - : getXxx() get called so many times, 为什么?

转载 作者:行者123 更新时间:2023-11-30 06:37:05 24 4
gpt4 key购买 nike

一段关于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在第 6 阶段接到电话 5 次 - RENDER_RESPONSE .该页面有一个 inputTextarea ,所以我在那里输入了一些东西,然后点击 Post (命令按钮)。然后 getProfileComment在阶段 1->4 中又被叫了 12 次 。每个阶段调用此方法3-4 次。然后之后就是属性newComment的setter方法获取调用(因此 setNewComment() 获取调用),getProfileComment再次调用 phase 5 .然后 postReply()接电话,然后 getProfileCommentphase 6 再次接到电话 5 次 .到底是怎么回事?它应该是这样的吗?如果你看看我的getProfileComment ,通过我的 EJB scholarBean ,我实际上查询了数据库,所以必须像这样查询数据库 20 次是一个非常糟糕的主意。

最佳答案

是的,getter 可以在一个请求期间被多次调用。只要它正确地完成它唯一的工作,它就不会造成伤害:返回 bean 属性。但是,在您的示例中,您直接在 getter 方法中加载列表!应该避免这种情况。模型的初始化/加载应该进入 bean 的构造函数或 @PostConstruct 或任何基于事件的方法,如操作方法。他们只被调用一次。 getter 应该只返回模型数据,仅此而已(除了一些琐碎的日志记录或延迟加载)。

另见:

关于java - <h :dataTable value=#{myBean. xxx}> : getXxx() get called so many times, 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3973198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com