2010-02-10 20 views
2

我有一個帶有3個選項和inputTextArea的無線電選擇的頁面。當我按下我的頁面上的提交按鈕,然後我需要做一些驗證......爲了這樣做,我把一個驗證器放在收音機上。問題是,當執行驗證程序時,我需要inputTextArea和radio的值,但它們帶有舊值,而不是在頁面被引用之前在頁面上定義的值。當第一次求和時,代碼String.valueOf(textAreaOcorrencia.getValue())爲null,但由於textArea是空的,所以我們可以使用String.valueOf(textArea.getValue())。equals(「被認爲是一個空的字符串。當它第二次被提交時,它具有它在第一次提交中應該具有的價值。我知道這與JSF生命週期有關,但我不知道如何更新這些值。JSF UIComponents的更新值

在此先感謝...

回答

3

在應用請求值階段,提交的值將被設置並能提供submittedValue。在驗證階段,提交的值將被驗證並轉換並設置爲value。隨着組件出現在組件樹中,組件將按照自頂向下的順序進行驗證。

因此,如果有問題的組件實際上在組件樹出現的電流分量,你需要通過UIInput#getSubmittedValue(),而不是UIInput#getValue()得到它的價值。

要了解有關JSF生命週期的更多信息,您可能會發現this self-practice article有用。

+0

嗨,我用這種方法解決了我的問題:而不是通過這種方式獲取UiComponente的值 UIComponent UI = view.findComponent(idComponent); (HtmlSelectOneRadio的UI實例){HtmlSelectOneRadio radio =(HtmlSelectOneRadio)UI; \t return radio; } ... 將String.valueOf(radio.getValue())等於(一些對象) – Moon13 2010-02-11 13:40:21

+0

我這樣做:。 迭代吧= FacesContext.getCurrentInstance()getExternalContext()getRequestParameterNames(); while(it.hasNext()){ \t String requestParameterName = it.next(); if(requestParameterName.equals(idComponent)){ \t parameterValue = request.getParameter(requestParameterName); \t \t \t \t \t} } 其中idComponent在這個循環是你在你的JSP,XHTML,任何網頁,或其他JSF指定將創建一個隨機ID每次HTML標籤ID,然後你贏了無法獲得您需要的UiComponent。 – Moon13 2010-02-11 13:40:49

+0

這確實是解決問題的另一種方法(實際上是:解決方法)。在JSF引擎中從深處拖動原始Servlet請求參數映射,JSF自身已將其設置爲組件的提交值。你是否例如**瞭解**爲什麼你的方式最初不起作用,爲什麼我提出的解決方案可以解決你的問題?這一切讓我有點嘆息:/ – BalusC 2010-02-11 13:47:05