2011-03-07 59 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