【问题标题】:How to skip validation on certain fields in JSF 2 when required如何在需要时跳过对 JSF 2 中某些字段的验证
【发布时间】:2011-12-20 15:00:53
【问题描述】:

我有两个 p:dialog。每个都包含一些标记为必填的输入字段。一次只显示一个对话框,但是当我在任何一个对话框上提交时,JSF 也会验证未显示的对话框的输入字段。对于未显示的对话框,跳过 JSF 2 中的验证的最佳方法是什么。一种方法可能是我设置 required="condation"。但不知道这种情况可能是什么以及它是否会起作用。

每个对话框最初都是隐藏的。每个都有自己的按钮来显示。当一个处于活动状态并且我单击保存按钮时,即使必填字段具有值,也会出现验证错误。验证错误来自非活动对话框面板。也许它可以让我知道我想要做什么。

更新

<p:dialog header="Edit Group" widgetVar="dialog_groupEdit" resizable="false"  
          width="300" showEffect="bounce" hideEffect="explode" modal="true" position="center">
    <h:panelGrid id="panel_groupEdit" columns="2">
        <h:outputText value="Group Name: "/>
        <h:inputText id="input_gnameEdit" size="26" value="#{groupBean.selectionGroup.gname}" required="true" requiredMessage="Edit Group: Name is required."/>
        <h:outputText value="Description:"/>
        <h:inputTextarea rows="6" cols="23" value="#{groupBean.selectionGroup.description}"/>
        <div></div>
        <p:commandButton value="Save" action="#{groupBean.saveGroupChanges}" oncomplete="#{args.validationFailed ? '':'dialog_groupEdit.hide()'}"
                                    update="panel_groups panel_groupEdit" style="float:right;"/>
        <div></div>
        <p:message for="input_gnameEdit"/>
    </h:panelGrid>
    </p:dialog>

    <p:dialog header="New Group" widgetVar="dialog_groupCreate" resizable="false"  
          width="300" showEffect="bounce" hideEffect="explode" modal="true" position="center">
    <h:panelGrid id="panel_groupCreate" columns="2">
        <h:outputText value="Group Name: "/>
        <h:inputText id="input_gnameCreate" size="26" value="#{groupBean.createGroup.gname}" required="true" requiredMessage="New Group: Name is reqired."/>
        <h:outputText value="Description:"/>
        <h:inputTextarea rows="6" cols="23" value="#{groupBean.createGroup.description}"/>
        <div></div>
        <p:commandButton value="Save" actionListener="#{groupBean.saveGroupCreate}" oncomplete="#{empty groupBean.createGroup.gname ? ' ':'dialog_groupCreate.hide()'}"
                                    update="panel_groupCreate panel_groups" style="float:right;"/>
        <div></div>
        <p:message for="input_gnameCreate"/>
    </h:panelGrid>
    </p:dialog>

【问题讨论】:

  • 你能发布你的代码吗?很难猜出你在做什么以及为什么。
  • 检查更新。附上代码。

标签: validation input jsf-2 dialog


【解决方案1】:

一种方法是我设置 required="condation"。

这会很笨拙。只需将每个单独的表单放入单独的&lt;h:form&gt; 组件中,或使用&lt;p:commandButton&gt;process 属性来标识您要处理的区域。

<p:commandButton process="panel_groupEdit" ... />

...

<p:commandButton process="panel_groupCreate" ... />

拥有“上帝”形态无论如何都是一种糟糕的做法。

另见:

【讨论】:

  • 这是唯一的方法。可能通过查看代码,您可以提出更好的解决方案。谢谢
【解决方案2】:

当您使用 &lt;p:dialog 时,PF 论坛上建议的一些良好做法是 -

  1. 切勿将&lt;p:dialog 放入任何其他组件中。将其放在某个位置,使其正好位于 &lt;h:body 下方。
  2. 给每一个&lt;p:dialog它自己的表格。但是,不要将对话框放在表单中,将表单放在对话框中。更新对话框本身并不好,只有它的内容。 (我认为这也应该可以解决您的问题。)

例如

<p:dialog widgetVar="dlg" ...
    <h:form ...
        <h:panelGroup id="dlgContent" ... 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多