2012-07-12 15 views
1

我有一個標準的JSF h:表單,它包含一個h:SelectOneMenu控件。只要我從頁面呈現時填充的列表中選擇一個項目,它就可以完美地工作。我不認爲這很重要,但要將其放在上下文中,select的值將用於構建一個查詢,該查詢將返回匹配記錄的列表。在JSF表單的SelectOneMenu控件中動態添加選項提交爲空

我已經在控件上實現了JQuery自動完成框,只要我選擇其中一個原始值,它仍然可以正常工作。

當頁面呈現時,當我在選擇控件中沒有輸入值時,問題就出現了。使用JQuery,我已經設置了它,以便當輸入的列表中的值不在列表中時,該值將作爲新選項添加​​到select中。

我可以驗證該選項是添加到底層的選擇控件,並通過JavaScript選擇。但是,當後面的bean立即調用setter時,傳遞給setter的值爲null,並且永遠不會到達運行查詢的函數。在AJAX響應中返回以下錯誤,但我尚未能夠找到值進行驗證的地方。這也不是必填字段。

Validation Error: Value is not valid

這裏是我的前端代碼:

<h:selectOneMenu id="make" styleClass="combobox" value="#{listBean.make}" 
        effect="fade" label="#{listBean.makeLabel}" > 
     <f:selectItems value="#{listBean.makeList}" /> 
    </h:selectOneMenu> 

而且在bean的setter:

public void setMake(String make) { 
     this.make = make; 
    } 

我猜我只需要找到一種方法,包括新選項在支持bean的makeList列表中,但我不知道該怎麼做。任何幫助或建議,將不勝感激。

的Java EE 6,GlassFish的3.1,3.7的Eclipse - 在兩個Firefox和Chrome

+0

什麼是'makeList''? – SJuan76 2012-07-12 21:16:21

+0

這是一個列表其中包含SelectItems的ArrayList – Mike 2012-07-12 21:20:45

+0

我還沒有使用SelectItem(我已經通過了bean)。你可以讓'make'作爲SelectItem嗎? – SJuan76 2012-07-12 21:22:49

回答

1

觀察問題,您需要通過<f:selectItems>提供動態添加的項目,而不是通過JavaScript。如果該項目不在<f:selectItems>中,那麼您將得到完全驗證錯誤。這樣做是爲了防止被篡改/被黑客請求,以試圖將非法/未提供的值存入服務器端。

更容易使用JSF組件庫。 PrimeFaces例如有一個<p:autoComplete>準確的目的。

+0

不是我希望得到的答案,但至少現在我知道爲什麼我無法使它工作。謝謝! – Mike 2012-07-13 14:37:06