【问题标题】:Keep dialog open after non-ajax request非ajax请求后保持对话框打开
【发布时间】:2012-09-08 17:44:09
【问题描述】:

我有几个 JSF 页面有一个 PrimeFaces 对话框来创建一个Person。因为此对话框包含文件上传,所以我不想使用 AJAX。创建Person 时将关闭该对话框。如果未创建 Person(验证失败或其他),则应显示对话框。

我见过有人使用visible="#{not empty facesContext.messages}" 来执行此操作,但是我不能使用它,因为被调用的方法在任何情况下都会返回FacesMessage

我现在的想法是生成一个视图参数(例如 showDialog)并使用visible="#{param.showDialog}"

我尝试过使用导航案例,但由于该方法是从多个页面调用的,因此我无法制作仅添加视图参数的通用导航案例。想法是这样的:

<navigation-rule>
    <from-view-id>*</from-view-id>
    <navigation-case>
        <from-action>#{personBean.create}</from-action>
        <from-outcome>true</from-outcome>
        <to-view-id>#{from-view-id}</to-view-id>
        <redirect>
            <view-param>
                <name>showDialog</name>
                <value>#{form-outcome}</value>
            </view-param>
        </redirect>
    </navigation-case>
</navigation-rule>

使用导航用例的另一个问题是对话框是一个复合标签,而动作是使用属性提供的。当我使用上述导航箱时,我会收到一条消息说Unable to find matching navigation case with from-view-id '/test.xhtml' for action '#{cc.attrs.saveAction}' with outcome 'true'

我认为最好/最简单的解决方案是在方法中添加视图参数。但是,requestmap 是不可变的,并且返回包含 ?showDialog=true 的字符串也不起作用。

【问题讨论】:

    标签: jsf navigation primefaces


    【解决方案1】:

    我不会用导航规则来处理它,而是让它类似于 Login Example of the Primefaces Showcases 。如您所见,当验证失败时对话框保持打开状态,如果提交操作成功则关闭。

    【讨论】:

    • 示例和我的案例的主要区别在于我没有使用 AJAX。否则我不必在这里发布问题;-)
    【解决方案2】:

    我找到了一个没有视图参数想法的解决方案。

    要提交表单,我使用p:commandButton,此按钮使用 AJAX。此按钮仅设置字段、验证字段并更新输入字段的容器。幸运的是,PrimeFaces 返回一个 JavaScript 值 (args.validationFailed),指示验证是否失败。

    当我单击保存按钮时,字段会通过 AJAX 进行验证,从而使对话框保持打开状态。验证通过后,我使用 JavaScript 单击非 AJAX 链接。

    JSF:

    <p:commandButton value="Save" update="containerOfValues"
        oncomplete="afterValidation(xhr, status, args)" />
    <p:commandLink ajax="false" action="#{cc.attrs.saveAction}"
        style="display:none" binding="#{saveLink}" />
    

    JavaScript:

    function afterValidation(xhr, status, args)
    {
        if (!args.validationFailed)
        {
            $("[id='#{saveLink.clientId}']").click();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多