JSF h:form和PrimeFaces p:dialog的验证问题

时间:2011-03-07 14:48:57

标签: jsf primefaces

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

要添加子元素,请单击“添加元素”链接,该链接使用PrimeFaces p:对话框标记弹出对话框。它类似于此处主要页面页面上的登录面板演示,包含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>

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

1 个答案:

答案 0 :(得分:5)

首先,你不能在另一个表格中嵌入一个表格。我认为这不是有效的HTML。

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

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