0

我遇到了关于基于其他一些组件的操作来渲染或执行 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 时根据我们的选择呈现它们。

4

1 回答 1

0

I could solve this by doing some research and understood the difference between ajax execute and update from following link

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

于 2013-04-29T11:22:26.400 回答