Primefaces commandButton在页面刷新时调用操作方法



完全编辑:也许我混淆了问题并误解了。简化代码后,问题简化为:如何防止<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>

由于缺少头部定义,该结构缺乏Ajax支持。在这种情况下,我只是在<h:body>-tag的正上方添加了<h:head/>,一切正常。

感谢所有贡献者!

我认为每次页面刷新时都不会调用操作方法increase(),而是称为complete()方法,这可能会让您认为操作方法已被调用。

p:commandButton中的oncomplete属性指示客户端操作,因此是 JS 方法,而不是服务器操作:EL 在每次页面刷新时解析它时执行#{bugBean.complete()}

最新更新