我遇到了有关基于某些其他组件的操作渲染或执行jsf组件的问题。
我想做的是: 首次加载页面时加载一些数据。所以我写了
<f:metadata>
<f:event listener="#{homeController.retrieveAllTagsForUser}"
type="preRenderView" />
<f:event listener="#{homeController.populatePostsForUser}"
type="preRenderView" />
</f:metadata>
populatePostsForUser方法首先加载用户的所有帖子,如下所示
public void populatePostsForUser() {
EntityManager manager = applicationContext.getEntityManagerFactory()
.createEntityManager();
Query query = manager.createNamedQuery("Post.selectPostForUser");
query.setParameter("user", this.getUser());
this.posts = (List<Post>) query.getResultList();
System.out.println("populatePostFOrUser called");
}
在页面加载后,我更新该方法中的posts字段,如下所示
this.posts = (List<Post>)em.createNamedQuery("Post.selectPostsByTags").setParameter("tags", tags).getResultList();
System.out.println("number of posts selected = " + this.posts.size());
System.out.println("selected posts for this tag = " + this.posts);
System.out.println("number of posts selected for tag = " + tags + " " + this.posts.size());
这会成功更新posts字段,但在此之后,再次调用相同的populatePostsForUser方法。每次重新渲染某个组件时都会调用它。
这只是我想知道的一个例子。我的问题是。如何控制jsf组件,以便我可以在另一个组件的某个ajax事件上呈现/更新/执行jsf组件?
我想知道在jsf组件之间进行通信的最佳方法,并根据我们在ajax时的选择进行渲染。
答案 0 :(得分:0)
我可以通过做一些研究来解决这个问题,并理解ajax执行和来自以下链接的更新之间的区别
https://javaserverfaces.java.net/nonav/docs/2.1/vdldocs/facelets/index.html