首页 文章

Primefaces - 隐藏对话框时不会触发更新

提问于
浏览
0

我在下面创建了我的应用程序的简化版本 .

<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 &amp;&amp; !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 回答

  • 0

    我们有一个类似的对话框取消按钮构建如下:

    <p:commandButton value="#{bundle['common.action.cancel']}"
                     icon="#{bundle['common.icon.cancel']}"
                     action="#{bean.cancel}"
                     process="@this"
                     update="@none"
                     oncomplete="PF('dialog').hide();"/>
    

    其中 bean.cancel 将对话框输入值设置为 null ,因此我们既不需要其他输入元素也不需要 update .

相关问题