2011-03-07 57 views
1

我有一个基本上是创建窗体的JSF页面。该表格由多种输入字段和一系列子元素组成。JSF h:form和PrimeFaces验证问题p:对话框

要添加子元素,请单击“添加元素”链接,使用PrimeFaces p:dialog标签弹出对话框。它类似于素面页上的登录面板演示在这里,完全与p:咆哮的验证消息:

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> 

......但那并没有奏效。任何帮助是极大的赞赏!

回答

5

首先,您不能将一个表单嵌入到另一个表单中。我认为这不是有效的HTML。

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

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

+0

嗨马特,我做了你所说的一切。它有效,但我仍然有我的副作用。不确定最好的方法来处理它。试想一下:我有一个“全名”字段和一个“电话号码”列表(在h:dataTable中)。要将电话号码添加到列表中,请单击“添加电话号码”,然后出现对话框,在对话框中输入电话号码并单击“添加”按钮。问题是咆哮向我显示验证消息“Full Name所需的值”,因为它验证页面上的所有字段,而不仅仅是对话框上的字段。 “添加”是一个Ajax请求。 – 2011-03-07 15:22:51

+0

嗯,我想你应该把全名的输入字段放在与对话框不同的窗体中。如果您提交表单,即使只更新了一个子集,也会验证所有元素。所以使用两种形式(不嵌套!)。 – 2011-03-07 18:21:10

+0

多数民众赞成它,两种形式,不嵌套的作品!谢谢马特! – 2011-03-07 18:52:28