当前位置: 首页 > 知识库问答 >
问题:

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

简意
2023-03-14

我面临着基于其他组件的动作呈现或执行jsf组件的问题。

我试图做的是:在第一次加载页面时加载一些数据。所以我写了

<f:metadata>
<f:event listener="#{homeController.retrieveAllTagsForUser}"
    type="preRenderView" />
<f:event listener="#{homeController.populatePostsForUser}"
                type="preRenderView" />
</f:metadata>

PopulatePostsfourser方法首先为用户加载所有帖子,如下所示

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());

这将成功更新posts字段,但在此之后,再次调用相同的populatePostsForUser方法。每次重新渲染某个组件时都称为。

这只是我想知道的一个例子。我的问题是。我如何控制jsf组件,以便我可以在另一个组件的某个ajax事件上呈现/更新/执行jsf组件?

我想知道jsf组件之间通信的最佳方式,并在涉及ajax时根据我们的选择呈现它们。

共有1个答案

鲍钊
2023-03-14

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

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

 类似资料: