我遇到了关于基于其他一些组件的操作来渲染或执行 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");
}
并在页面加载后,我更新该方法中的帖子字段如下
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());
这会成功更新帖子字段,但之后,再次调用相同的 populatePostsForUser 方法。每次重新渲染某个组件时都会调用它。
这只是我想知道的一个例子。我的问题是。如何控制 jsf 组件,以便可以在另一个组件的某些 ajax 事件上渲染/更新/执行 jsf 组件?
我想知道 jsf 组件之间通信的最佳方式,并在涉及 ajax 时根据我们的选择呈现它们。