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
,现在可以使用了。
编辑:问题没有链接资源的答案,但我解决了。我会 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
,现在可以使用了。