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

关于dataTable简单代码。 CentralFeed是SessionScoped Bean, PostComment是RequestScoped Bean

    

CentralFeed.java

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

我的问题是getProfileComments()被调用很多。 currentPhaseId将告诉我们该方法被调用的阶段。 当页面首次加载时, getProfileComment会在第6阶段getProfileComment调用5次左右。 该页面有一个inputTextarea ,所以我输入了一些内容,然后单击Post (commandButton)。 然后通过阶段1-> 4再次调用getProfileComment 12次 。 每个阶段调用此方法3-4次 。 然后,属性newComment的setter方法得到调用(所以setNewComment()得到调用), getProfileCommentphase 5再次调用get。 然后postReply()得到调用,然后getProfileCommentphase 6再次调用5次 。 到底是怎么回事? 这是假设是这样的吗? 如果你看看我的getProfileComment ,通过我的EJB scholarBean ,我实际上是在查询数据库,所以不得不像这样查询数据库20次这是一个非常糟糕的主意。

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

也可以看看:

  • 为什么JSF多次调用getter?