小编mou*_*hop的帖子

p:对话框中的清除表单在操作/方法调用失败后关闭

我在p:dialog通过AJAX提交的组件中有一个表单.对话框中的表单是通过ui:include另一个.xhtml只包含表单及其组件的表单(不,我不是嵌套表单;对话框本身不是任何形式).包含页面的支持bean是'ViewScoped'.

MOST的功能很好:

  • 成功验证后,表单将执行save方法; 成功保存后,对话框关闭; 打开后续记录会显示数据库中的正确记录信息.
  • 验证失败后,提交的值将保持不变,对话框将保持打开状态并显示验证错误,修复无效字段并在成功保存时重新提交结果.

当被action调用p:commandButton失败时,问题就出现了.如果失败,对话框保持打开状态,并向用户显示"保存更改错误" h:messages; 此外,提交的值仍然存在于输入字段中.当表单保持打开时,这很好(甚至是期望的) - 但是在关闭对话框并重新打开它时,提交的值仍然在文本字段中.这很糟糕,因为它给用户留下了保存成功的印象(h:messages由于对话框更新,组件现在是空白的).

到目前为止,我已经尝试了以下内容,其中没有一个已经解决了这个问题:

  • 1.1)在打开的对话框中将包含表单的支持bean设置为bean的新实例.
  • 1.2)由于bean现在是一个新实例,我还使用数据bean中的详细信息重新填充地址对象.
  • 2.1)禁用对话框上的关闭按钮并添加一个p:commandButton"取消"按钮,其中包含一个p:resetInput组件以关闭对话框/重置表单.(对话框关闭,但表单中提交的值仍然存在).
  • 2.2)从中调用一个方法p:commandButton,删除RequestMap包含表单的辅助bean.
  • 2.3)尝试将按钮设置为immediate=trueimmediate=false.
  • 2.4)尝试按下设置的按钮process=@this,我用来关闭表单的类似策略,以确保它在重新打开时会有新的字段.

您可以考虑将支持bean设置为新实例,并重新填充地址对象,我会看到一个新的形式,但是NOPE.

以下是一些来源:

mainform.xhtml的部分

    <p:dialog id="dlgAddress"
              header="Address Edit"
              widgetVar="dialogAddress"
              dynamic="true"
              modal="false"
              closable="false"
              resizable="false"
              styleClass="dlgAddress"
              visible="#{addressform.showDlgAddress}">
        <ui:include src="addressform.xhtml"/>
    </p:dialog>
Run Code Online (Sandbox Code Playgroud)

addressform.xhtml

<h:form id="fDlgAddress">
    <div id="addresses-container">
        <h:messages id="msgDlgAddress" errorClass="errormsg" infoClass="infomsg1" layout="table"/>
        <h:panelGrid columns="1"
                     styleClass="pgAddresses"
                     rendered="#{!addressform.address.exists}">
            <h:outputText value="No active #{addressform.address.atypCode} …
Run Code Online (Sandbox Code Playgroud)

forms dialog reset primefaces jsf-2

8
推荐指数
1
解决办法
2万
查看次数

标签 统计

dialog ×1

forms ×1

jsf-2 ×1

primefaces ×1

reset ×1