Primefaces 3.4.1 不 POST 对话框内的表单

Primefaces 3.4.1 does not POST with a form inside a dialog

编辑:问题没有链接资源的答案,但我解决了。我会 post 解决方案。

我正在开发一个使用 Primefaces 3.4.1 的项目(不,我无法更新它)。

我创建了一个带有一些输入的对话框。该方法被调用,但输入未填充到 bean 中。这不会以“正常”形式发生。

这是简化代码:

browse.xhtml:

<!DOCTYPE html>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core"
      template="../layout/template.xhtml">
      
      <ui:define name="body">
          <p:dialog 
              id="dialog" 
              visible="#{bean.getDialogVisible()}" 
              modal="true"
          >
              <h:form id="form">
                  <p:inputText 
                      id="x" 
                      styleClass="Form-input" 
                      value="#{bean.x}"
                  />
                  <p:commandButton 
                      value="submit" 
                      action="#{bean.submit()}"
                      immediate="true"
                  ></p:commandButton>
              </h:form>
          </p:dialog>
      </ui:define>
</ui:composition>

Bean.java:

@ManagedBean
@SessionScoped
public class Bean {
    private String x;
    private boolean isDialogVisible;

    public String getX() {
        return x;
    }

    public void setX(String x) {
        this.x = x;
    }

    public boolean isDialogVisible() {
        return isDialogVisible;
    }

    public void setDialogVisible(boolean isDialogVisible) {
        this.isDialogVisible = isDialogVisible;
    }
    
    public boolean getDialogVisible() {
        boolean res = this.isDialogVisible();
        this.setDialogVisible(false);
        return res;
    }
    
    public void submit() {
        logger.info(this.x);
    }
}

在 loggind 和调试过程中,x 在方法 submit() 中总是 null

PS:请注意,如果未指定 immediate="true"ajax="false"commandButton 根本不会调用 submit()

我删除了 immediate="true" 并将 process="@form" 添加到 p:commandButton,现在可以使用了。