基于其他组件的某些操作更新,执行或呈现jsf组件

时间:2013-04-27 08:58:56

标签: ajax jsf-2

我遇到了有关基于某些其他组件的操作渲染或执行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时的选择进行渲染。

1 个答案:

答案 0 :(得分:0)

我可以通过做一些研究来解决这个问题,并理解ajax执行和来自以下链接的更新之间的区别

https://javaserverfaces.java.net/nonav/docs/2.1/vdldocs/facelets/index.html