完全修改:
也许我在混淆问题和误解。简化我的代码之后,问题简化为:如何阻止<p:commandButton>
在页面刷新时执行它的操作方法(比如在浏览器窗口中点击F5时)?
JSF代码:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:body>
<h:form>
<h:outputText value="#{bugBean.number}" />
<h:outputText value="#{bugBean.isComplete()}" />
<p:commandButton id="entryCommand" value="add"
action="#{bugBean.increase()}" update="@form" oncomplete="#{bugBean.complete()}"/>
</h:form>
</h:body>
</html>
支持bean代码:
package huhu.main.managebean;
import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class BugBean implements Serializable {
private static final long serialVersionUID = 1L;
private int number;
private boolean isComplete = false;
public void increase(){
number++;
}
public void complete(){
isComplete = true;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public boolean isComplete() {
return isComplete;
}
public void setComplete(boolean isComplete) {
this.isComplete = isComplete;
}
}
更新
即使我删除了oncomplete
这样的内容,也只需点击<p:commandButton>
一次,每次刷新页面时计数器都会亮起。
<h:form>
<h:outputText value="#{bugBean.number}" />
<p:commandButton id="entryCommand" value="add"
action="#{bugBean.increase()}" update="@form"/>
</h:form>
答案 0 :(得分:5)
该构造缺乏Ajax支持,因为它似乎缺少头部定义。在这种情况下,我刚刚在<h:head/>
标记的正上方添加了<h:body>
,一切正常。
感谢所有贡献者!
答案 1 :(得分:0)
我认为在每次页面刷新时都没有调用操作方法increase()
,而是调用complete()
方法,这可能会让你认为已经调用了action方法。 / p>
oncomplete
中的p:commandButton
属性表示客户端操作,因此是JS方法,而不是服务器操作:EL执行#{bugBean.complete()}
在每次刷新页面时解析它。