【问题标题】:validation problem with JSF h:form and PrimeFaces p:dialogJSF h:form 和 PrimeFaces p:dialog 的验证问题
【发布时间】:2011-07-10 09:58:31
【问题描述】:

我有一个基本上是创建表单的 JSF 页面。该表单由各种输入字段和子元素列表组成。

要添加子元素,请单击“添加元素”链接,该链接会使用 PrimeFaces p:dialog 标签弹出一个对话框。它类似于此处主要面孔页面上的登录面板演示,并带有 p:growl 验证消息:

http://www.primefaces.org/showcase/ui/dialogLogin.jsf

我的问题是,当我在对话框中单击“添加”时,我看到对话框中的字段以及主窗体上的字段的咆哮验证消息。我只想查看对话框的消息。

有没有办法做到这一点?我尝试在表单中嵌入表单,但没有成功。也就是说,我试过了……

<h:form>

  <p:messages /> <!-- show validation messages for create form contents -->

  <h:inputText value .../>

  <h:dataTable value .../> <!-- list of sub elements -->

  <h:commandLink "shows the add element dialog" ... />

  <p:growl /> <!-- shows the validation messages for dialog contents -->

  <p:dialog>

     <h:form>

       <h:inputText value .../>

       <p:commandButton "validate dialog box fields then add the item to the list" .../>

     </h:form>

  </p:dialog>

</h:form>

...但这没有用。非常感谢任何帮助!

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    首先,您不能将一种形式嵌入到另一种形式中。我认为它不是有效的 html。

    p:growl 的行为类似于 h:messages。它显示页面所有元素的消息(不限于一种形式)。您可以通过设置globalOnly="true" 属性将其限制为仅全局消息(没有id 的消息)。

    更改您的 commandButton 以仅更新 p:growl 并确保它是由您的 commandButton (ajax=true) 触发的 ajax 请求。 p:commandButton 具有 ajax=true 作为默认行为。因此,如果您没有明确更改它,那么它就是一个 ajax 请求。

    【讨论】:

    • 嗨,马特,你说的我都做了。它有效,但我仍然有我的副作用。不确定处理它的最佳方法。想象一下:我有一个带有“全名”字段和“电话号码”列表的表单(在 h:dataTable 中)。要将电话号码添加到列表中,请单击“添加电话号码”并出现对话框,在对话框中输入电话号码并单击“添加”按钮。问题是咆哮向我显示了验证消息“全名所需的值”,因为它正在验证页面上的所有字段,而不仅仅是对话框上的字段。 “添加”是一个 ajax 请求。
    • 啊,我认为您应该将全名的输入字段放在与对话框不同的形式中。如果您提交表单,即使仅更新了子集,也会验证所有元素。所以使用两种形式(不是嵌套的!)。
    猜你喜欢
    • 1970-01-01
    • 2014-01-23
    • 2011-05-20
    • 1970-01-01
    • 2013-10-02
    • 2014-04-27
    • 2018-01-09
    • 2012-02-28
    • 1970-01-01
    相关资源
    最近更新 更多