在我的应用程序中,我有这个托管 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>
这些按钮工作正常。但是,我观察到的情况很奇怪。当我单击 Like 按钮时,在控制台上我看到了这些行:
INIT null
LIKE [commentableID]
不知何故,该属性在函数commentableID
中不可用,init()
但后来在函数中可用like()
。
如果您能给我解释上述两个问题,我将不胜感激。
最好的祝福,