rich:autocomplete不工作

时间:2014-01-08 10:24:40

标签: jsf-2 richfaces jsf-1.2

我们正在从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>

根据迁移文档,将<rich:suggestionbox>替换为<rich:autocomplete>. 以下是xhtml代码:

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

下面是getSearchList方法

  public List<CustomObject> getSearchList(String searchNow) {


  } 

<rich:autocomplete>组件存在于自定义组件中,该组件的调用方式如下:

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

我面临的问题是,当在<rich:autocomplete>内输入输入时,会发生ajax调用,但我正处于异常之下: 目标无法访问,标识符'bean'已解析为null。

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

使用<rich:autocomplete>时我错过了什么?请帮忙。

编辑1: 当像这样调用autocompleteMethod:#{masterBean.object2.object3.getSearchList}时,没有观察到这个问题,其中masterBean是faces-config.xml中定义的具有会话范围的masterBean。 autocompleteMethod也必须接受String参数而不是对象。 那么我们不能在中间对象上调用autocompleteMethod吗?它必须是JSF中定义的bean吗?这很奇怪,但我观察到同样的行为。

编辑2: 在尝试搜索答案时,获得了指出同一问题的链接:autocomplete method does not resolve bean if ui:included and only one parameter provided 它提供了两个选项:使用3个参数定义自动完成方法,使用复合组件,而不是ui:inlcude。

1 个答案:

答案 0 :(得分:2)

从EDIT 2可以看出,自动完成方法签名更改为:

public List<CustomObject> getSearchList(FacesContext context, UIComponent uiComp,String searchNow),问题已解决。