私のアプリケーションには、次のマネージド Bean があります。
@ManagedBean(name = "mrBean")
@RequestScoped
public class MrBean {
@ManagedProperty(value = "#{param.id}")
private Long commentableID;
private String comment;
@PostConstruct
public void init() {
System.out.println("INIT " + commentableID);
}
public void postComment() {
System.out.println("POST COMMENT " + commentableID);
}
public void like(boolean like) {
System.out.println("LIKE " + commentableID);
}
// Getters and Setters
}
問題 1:
記事閲覧ページに、コメント欄を設けています。
<h:panelGrid columns="1">
<p:inputTextarea id="comment" value="#{mrBean.comment}" />
<p:commandButton actionListener="#{mrBean.postComment}" value="Post">
<f:param name="id" value="#{viewCommentable.commentableID}" />
</p:commandButton>
</h:panelGrid>
上記のコードですべて正常に動作します。ただし、postComment()
関数はcomment
プロパティのみを必要とするためprocess='comment'
、上記のに入れてみましたp:commandButton
。この時点で、Post
ボタンをクリックすると常にINIT [commentableID]
コンソールに表示されます。しかし、私は決して見ませんPOST COMMENT [commentableID]
。postComment()
つまり、 Bean が正しく作成されたにもかかわらず、リスナー メソッドが呼び出されませんでした。
問題 2:
同じページに、記事の好き嫌いを切り替えるための次のトグル ボタンがあります。
<h:inputHidden id="commentableID" value="#{mrBean.commentableID}" />
<p:selectBooleanButton id="like" value="#{viewCommentable.commentable.liked}" onLabel="Liked" offLabel="Like" >
<p:ajax process="like dislike commentableID" listener="#{mrBean.like(viewCommentable.commentable.liked)}" />
</p:selectBooleanButton>
<p:selectBooleanButton id="dislike" value="#{viewCommentable.commentable.disliked}" onLabel="Liked" offLabel="Like" >
<p:ajax process="like dislike commentableID" listener="#{mrBean.dislike(viewCommentable.commentable.disliked)}" />
</p:selectBooleanButton>
これらのボタンは正常に機能しています。しかし、私が観察したことはかなり奇妙です。[いいね] ボタンをクリックすると、コンソールに次の行が表示されました。
INIT null
LIKE [commentableID]
どういうわけか、プロパティcommentableID
は関数で使用できませんでしたinit()
が、後で関数で使用できましたlike()
。
上記2点について、ご教授いただけますと幸いです。
よろしくお願いします、