当前位置: 首页 > 面试题库 >

:getXxx()被调用了很多次,为什么?

糜鸿风
2023-03-14
问题内容

关于的简单代码dataTableCentralFeed是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(命令按钮)。然后在阶段1->
4期间再getProfileComment呼叫 12次 。每个阶段调用此方法 3-4次 。然后,此属性的newCommentget
方法的setter方法(即setNewComment()get调用),getProfileComment再次在处进行get调用phase 5。然后postReply()得到的呼叫,然后getProfileComment再次获得呼吁其他 5次phase 6。到底是怎么回事?应该这样吗?如果您getProfileComment通过EJB
查看我的信息,scholarBean我实际上是在查询数据库,因此不得不像这样查询20次这样的数据库是一个非常糟糕的主意。


问题答案:

是的,在请求期间可以多次调用getter。只要正确地完成其唯一工作即可:返回bean属性。但是,在您的示例中,您将直接使用getter方法加载列表!应该避免这种情况。模型的初始化/加载应该在bean的构造函数@PostConstruct或任何基于事件的方法(如action方法)中进行。他们只被叫一次。吸气剂应仅返回模型数据,仅返回模型数据(除了一些琐碎的日志记录或延迟加载之外)。



 类似资料:
  • 问题内容: 我的活动课在这里: 和相机预览类在这里: 但是,当我测试该类时,似乎首先调用onResume(),然后在1或2秒后再次调用。因此,相机必须再次刷新。如果我根本没有onResume(),则摄像头预览稳定,但是如果我从主屏幕或其他某个应用再次切换到该应用,则会崩溃。我发现onPause()不会影响任何一个。我的代码正确吗?我应该添加/删除哪些内容以使其不会再次刷新并且在应用切换后仍然不会崩

  • 我读在初始渲染时只被调用一次,但我看到它被渲染了多次。 似乎我创建了一个递归循环。 组件didMount调度动作来获取数据 一旦接收到数据,它就会触发成功操作,将数据存储在redux状态。 父反应组件连接到redux存储,并且具有mapStateToProps用于刚刚在上述步骤中更改的条目 父渲染子组件(通过变量编程选择) 子组件的组件didMount再次被调用 它消除了获取数据的操作 我想这就是

  • 问题内容: 我正在使用Swift开发iOS通用应用程序,使用自动布局功能,并且仅支持纵向模式。 我发现打过多次。而是在启动MyApp时仅被调用一次。 为什么要多次调用?是否会按顺序对每个(,等)进行约束? 任何信息将不胜感激。 问题答案: 仅被调用一次:需要加载视图时。 ,但是,每个运行循环都会在已存在或已对其调用的任何视图上调用一次- 这包括每当将子视图添加到视图,滚动,调整大小等时。

  • 我试图为BillingClient v.2.2.0和Kotlin协同程序编写一个包装: 正如您所见,当我试图查询购买或购买时,我确保客户已经准备好。但在生产中存在许多错误: 我试图了解问题的原因,得到了if将被多次调用。可能存在异常。我一直想知道这是怎么可能的,因为我每次调用都会创建新的侦听器?我无法在emulator或测试设备上重现此问题。有人能解释一下这里发生了什么,以及如何解决吗?

  • 我正在尝试在像这样: 然后在我的它呈现: 我正在将我的fetch记录到控制台中,它被调用了三次。流程是我在登录页面上(加载时挂载一次),我登录,它将我重定向到自己呈现的主页。此时,我在控制台中看到: