【发布时间】:2014-01-26 09:19:33
【问题描述】:
我们正在从 jsf 1.2 升级到 jsf 2。 我们使用的是 apache myfaces 2.1 和 rich faces 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”解析为空。
我在 xhtml 中打印了 bean(bean.getSearchList 的)的值,它不为空。
我在使用 <rich:autocomplete> 时是否遗漏了什么?请帮忙。
编辑 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。
【问题讨论】:
-
自定义组件是指 facelet 自定义组件还是复合组件?
-
@L-Ray:它是一个facelet cutom组件