2014-01-08 62 views
1

我們正在從jsf 1.2升級到jsf 2. 我們使用的是apache myfaces 2.1和豐富的面孔4.3。富有:自動完成不工作

下面是XHTML代碼之前遷移:

<h:inputText id="#{userSearch}" value="#{bean.input}"/> 
<rich:suggestionbox for="#{userSearch}" var="rslt" suggestionAction="#{bean.getSearchList}">          

</rich:suggestionbox> 

作爲每遷移DOC,取代<rich:suggestionbox><rich:autocomplete>. 以下是XHTML代碼:

<rich:autocomplete mode="ajax" autocompleteMethod="#{bean.getSearchList}" /> 

下面是getSearchList方法

public List<CustomObject> getSearchList(String searchNow) { 


    } 
<example:SearchUsr bean="#{someOtherObject.bean}"/> 

我面臨的問題是,當內部<rich:autocomplete>輸入的輸入,AJAX調用發生,但我正在逐漸例外如下: 目標10 <rich:autocomplete>組件被調用像這樣的自定義組件內部存在無法訪問,標識符'bean'解析爲null。

我在xhtml裏打印bean(bean.getSearchList)的值,它不是null。

我在使用<rich:autocomplete>時丟失了什麼?請幫忙。

EDIT 1: 當autocompleteMethod調用這樣的:#{masterBean.object2.object3.getSearchList},未觀察到這個問題,即masterBean是faces-config.xml中定義的會話範圍的一個。另外autocompleteMethod必須接受String參數而不是對象。 那麼,我們無法在中間對象上調用autocompleteMethod?它必須是一個在JSF中定義的bean?這很奇怪,但我正在觀察同樣的行爲。

編輯2: 在試圖尋找一個答案,得到了這個鏈接,指出了同樣的問題:autocomplete method does not resolve bean if ui:included and only one parameter provided 它提供了兩個選項:定義自動完成的方法有3個參數,使用複合組件,而不是UI :inlcude。

+0

用自定義組件表示一個facelet自定義組件或複合組件? –

+0

@ L-Ray:它是一個facelet cutom組件 – Atul

回答

2

從EDIT 2可以明顯看出,自動完成方法簽名改變爲:

public List<CustomObject> getSearchList(FacesContext context, UIComponent uiComp,String searchNow),這個問題得到解決。