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

时间:2014-08-15 01:54:38

标签: jsf primefaces

我在下面创建了我的应用的简化版本。

    <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 = "";
}

我面临的问题是:

如果我在名称字段上遇到必填字段验证错误,并且输入了地址,之后如果我点击取消,我将调用操作方法&#34; sampleBean.cancel&#34;(重置两者名称和地址为空白)然后在隐藏对话框之前更新表单。

然而,在隐藏对话框之后,如果我再次点击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 :(得分: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,因此我们既不需要process也不需要update其他输入元素。