2

私のアプリケーションには、次のマネージド 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点について、ご教授いただけますと幸いです。

よろしくお願いします、

4

2 に答える 2

0

プロセスを追加し、p:commandButtonに属性を更新します。

     <h:panelGrid columns="1">
        <p:inputTextarea id="comment" value="#{mrBean.comment}" />

        <p:commandButton actionListener="#{mrBean.postComment}" value="Post" process="@this" update="grid">
          <f:param name="id"  value="#{viewCommentable.commentableID}" />
        </p:commandButton>
    </h:panelGrid>

ただし、プロセス属性には、@ this、@ form、@allなどの多くのキーワードがあります。ここに詳細を表示

于 2012-06-05T11:21:21.233 に答える