【问题标题】:Primefaces commandButton asynchronous actions not firedPrimefaces commandButton 异步操作未触发
【发布时间】:2015-02-11 01:38:20
【问题描述】:

我有一个 Primefaces 应用程序,我在其中启动了一个包含表单的对话框。该对话框有一个保存/取消按钮对。在此对话框中,我无法调用 oncomplete、onstart 等方法。我在其他回复中看到原因是没有执行 AJAX。但是,我不知道这种情况下的原因,因为 commandButton 的类型是 submit 并且应该具有 ajax="true" (默认情况下)。谁能给它一点光?

我的 xhtml:

     <composite:interface>
        <composite:attribute name="bean" required="true"/>
     </composite:interface>

     <composite:implementation>
        <h:outputScript library="careplan" name="js/utils.js" />

        <p:dialog id="addEventDialog" widgetVar="addEventDialog" header="#{careplanMessages['panel.title.eventAdd']}" modal="true" resizable="false">
           <h:form id="eventAddForm" widgetVar="eventAddForm">
              <p:fieldset legend="#{careplanMessages['label.field.data']}" >
                 <h:panelGrid id="formGrid" widgetVar="formGrid" columns="2" cellpadding="5">
                    <p:outputLabel for="parentNode">#{careplanMessages['label.field.parentNode']}</p:outputLabel>
                    <p:inputText id="parentNode" label="#{careplanMessages['label.field.parentNode']}" value="#{cc.attrs.bean.parentNode}" required="true"/>

                    <p:outputLabel for="name">#{careplanMessages['label.field.eventName']}</p:outputLabel>
                    <h:panelGrid columns="2">
                       <p:inputText id="name" label="#{careplanMessages['label.field.eventName']}" value="#{cc.attrs.bean.name}" required="true" />
                       <p:message for="name" display="icon" />
                    </h:panelGrid>

                    <p:outputLabel for="description">#{careplanMessages['label.field.description']}</p:outputLabel>
                    <h:panelGrid columns="2">
                       <p:inputTextarea id="description" label="#{careplanMessages['label.field.description']}" value="#{cc.attrs.bean.description}" rows="6" cols="33" required="true"/>
                       <p:message for="description" display="icon" />
                    </h:panelGrid>

                    <p:outputLabel for="minutes">#{careplanMessages['label.field.minutes']}</p:outputLabel>
                    <h:panelGrid columns="2">
                       <p:spinner id="minutes" label="#{careplanMessages['label.field.minutes']}" value="#{cc.attrs.bean.minutes}" min="0">
                          <f:validateDoubleRange minimum="1.0" />
                       </p:spinner>
                       <p:message for="minutes" display="icon" />
                    </h:panelGrid>

                    <p:outputLabel for="active">#{careplanMessages['label.field.active']}</p:outputLabel>
                    <p:selectBooleanCheckbox id="active" label="#{careplanMessages['label.field.active']}" value="#{cc.attrs.bean.active}" />
                 </h:panelGrid>
              </p:fieldset>

              <p:separator />

              <h:panelGrid columns="2" width="100%">
                 <h:commandButton 
                    value="#{careplanMessages['button.save']}" 
                    onclick="alert ('onclick')" 
                    onstart="alert ('onstart')" 
                    onsuccess="alert ('onsuccess')" 
                    onerror="alert ('onerror')" 
                    oncomplete="alert ('oncomplete')"
                    styleClass="btn btn-default btn-small" />
                 <h:commandButton type="button" value="#{careplanMessages['button.cancel']}" onclick="PF ('addEventDialog').hide()" styleClass="btn btn-default btn-small" />
              </h:panelGrid>
           </h:form>
        </p:dialog>
     </composite:implementation>
  </ui:composition>

这里是我的支持 bean:

  @ManagedBean
  @ViewScoped
  public class HouseLepEventAddBean implements Serializable {

     private static final Logger LOGGER = LoggerFactory.getLogger (HouseLepEventAddBean.class);

     private String name = null;
     private String parentNode = "test";
     private List <SelectItem> parentNodeList = null;
     private String description = null;
     private int minutes = 0;
     private boolean active = true;

     @PostConstruct
     public void init () {

     }

     public String getName () {
        return name;
     }

     public void setName (String name) {
        this.name = name;
     }

     public String getParentNode () {
        return parentNode;
     }

     public void setParentNode (String parentNode) {
        this.parentNode = parentNode;
     }

     public List <SelectItem> getParentNodeList () {
        return parentNodeList;
     }

     public void setParentNodeList (List <SelectItem> parentNodeList) {
        this.parentNodeList = parentNodeList;
     }

     public String getDescription () {
        return description;
     }

     public void setDescription (String description) {
        this.description = description;
     }

     public int getMinutes () {
        return minutes;
     }

     public void setMinutes (int minutes) {
        this.minutes = minutes;
     }

     public boolean isActive () {
        return active;
     }

     public void setActive (boolean active) {
        this.active = active;
     }
  }

谢谢!

【问题讨论】:

    标签: ajax jsf primefaces commandbutton


    【解决方案1】:

    您正在使用 &lt;h:commandButton&gt; 这是一个 JSF 组件,请将其替换为 Primefaces 的 &lt;p:commandButton&gt; 默认启用 AJAX。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多