2014-01-08 59 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),这个问题得到解决。