: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()得到调用), getProfileComment
在phase 5
再次调用get。 然后postReply()
得到调用,然后getProfileComment
在phase 6
再次调用5次 。 到底是怎么回事? 这是假设是这样的吗? 如果你看看我的getProfileComment
,通过我的EJB scholarBean
,我实际上是在查询数据库,所以不得不像这样查询数据库20次这是一个非常糟糕的主意。
是的,在请求期间可以多次调用getter。 只要它正确地完成它的唯一工作就不会有害:返回bean属性。 但是,在您的示例中,您将直接在getter方法中加载列表! 这应该避免。 模型的初始化/加载应该在bean的构造函数或@PostConstruct
或任何基于事件的方法(如action方法)中。 他们只被召唤一次。 getter应该只返回模型数据而已(仅限于一些简单的日志记录或延迟加载)。
也可以看看:
- 为什么JSF多次调用getter?