我在下面创建了我的应用程序的简化版本 .
<h:form>
<p:commandButton value="ADD NEW" action="#{sampleBean.onAddNew}" oncomplete="PF('addDialog').show()" update=":addForm"/>
</h:form>
单击按钮时将打开以下对话框 .
<p:dialog widgetVar="addDialog">
<h:form id="addForm">
<p:messages autoUpdate="true" closable="true"/>
<p:outputLabel value="Name :"/>
<p:inputText value="#{sampleBean.name}" required="true" requiredMessage="Name is a required field"/>
<p:outputLabel value="Address :"/>
<p:inputText value="#{sampleBean.address}"/>
<p:commandButton value="Save" action="#{sampleBean.save}" oncomplete="if (args && !args.validationFailed) PF('addDialog').hide();"/>
<p:commandButton value="Cancel" action="#{sampleBean.cancel}" immediate="true" oncomplete="PF('addDialog').hide()" update="addForm"/>
</h:form>
</p:dialog>
这是支持bean代码:
public void onAddNew()
{
name = "";
address = "";
}
public void save()
{
System.out.println("Saving ... " + name + " : " + address);
name = "";
address = "";
}
public void cancel()
{
System.out.println("Cancelling ... " + name + " : " + address);
name = "";
address = "";
}
我面临的问题是:
如果我在名称字段上遇到必需的字段验证错误并且输入了地址,之后如果我点击取消,我正在调用操作方法“sampleBean.cancel”(将名称和地址重置为空白)然后更新隐藏对话框之前的表单 .
然而,在隐藏对话框后,如果我再次单击ADD NEW,它仍然保持旧状态(地址值,我之前输入的) .
我需要清除并显示没有任何旧值的对话框 .
有人可以在上面的代码中指出这个问题吗?
我正在使用Primefaces 5.0
找到一个解决方案,但我不确定这是否是正确的解决方法 .
<p:commandButton value="Cancel" action="#{sampleBean.cancel}" immediate="true" oncomplete="PF('addDialog').hide()" update="addForm">
<p:resetInput target="addForm"/>
</p:commandButton>
问候 .
1 回答
我们有一个类似的对话框取消按钮构建如下:
其中
bean.cancel
将对话框输入值设置为null
,因此我们既不需要其他输入元素也不需要update
.