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

时间:2012-10-31 11:59:19

标签: ajax jsf-2 primefaces

完全修改: 也许我在混淆问题和误解。简化我的代码之后,问题简化为:如何阻止<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>

2 个答案:

答案 0 :(得分:5)

该构造缺乏Ajax支持,因为它似乎缺少头部定义。在这种情况下,我刚刚在<h:head/>标记的正上方添加了<h:body>,一切正常。

感谢所有贡献者!

答案 1 :(得分:0)

我认为在每次页面刷新时都没有调用操作方法increase(),而是调用complete()方法,这可能会让你认为已经调用了action方法。 / p>

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