他のコンポーネントのアクションに基づく 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 メソッドが再度呼び出されます。一部のコンポーネントが再レンダリングされるたびに呼び出されます。
これは私が知りたいことのほんの一例です。私の質問はです。別のコンポーネントの ajax イベントで jsf コンポーネントをレンダリング/更新/実行できるように、jsf コンポーネントを制御するにはどうすればよいですか?
ajaxが関係している場合、jsfコンポーネント間で通信し、選択に従ってレンダリングする最良の方法を知りたいです。