Richfaces 4自动完成组件AJAX值更新

时间:2011-06-28 21:04:41

标签: ajax jsf richfaces

尝试将Richfaces 3.3项目迁移到4.获得一个rich:suggestionBox组件并将其转换为rich:autocomplete组件,但遇到了重大问题。

要求是:填写部分自动填充功能,为用户提供合适的选项。当用户从下拉列表中选择某些内容时,组件应更新其值,禁用自身,并在辅助字段中计算/更新默认值,用户可以编辑该字段。到目前为止,我有这个:

<a4j:jsFunction name="jsFunc"
    execute="autoComplete"
    render="species_name individualUserStr"
    actionListener="#{individualsBean.selectedIndividualElem.assignDefaultNickname}"/>


<rich:autocomplete
autocompleteMethod="#{individualsBean.speciesForBox}"
mode="cachedAjax"
layout="table"
var="sp"
id="species_name"
value="#{individualsBean.selectedIndividualElem.userCommonName}"
fetchValue="#{sp.commonName}"
disabled="#{individualsBean.selectedIndividualElem.userCommonName != null
    and individualsBean.selectedIndividualElem.userCommonName ne ''}"
onselectitem="jsFunc()"

>
...
</rich:autocomplete>

<h:inputText value="#{individualsBean.selectedIndividualElem.ssi.individualUserStr}"
id="individualUserStr"
maxlength="28"
styleClass="inputTextMediumRF">
</h:inputText>

现在,当用户选择调用jsFunc的东西时,调用assignDefaultNickname并且一切正常,除了用于确定辅助字段的值的assignDefaultNickname中的计算,individualUserStr取决于值除了提交表单之前,我没有提交species_name,但是我没有提交species_name,因此在assignDefaultNickname中完成的计算不正确。

在调用assignDefaultNickname之前,我需要以某种方式调用individualBean.selectedIndividualElem.userCommonName上的setter,但我无法弄清楚如何执行此操作。 AJAX和这个自动完成功能似乎存在问题;这就是为什么我必须使用这个round-a-bout jsFunction组件来调用该方法的部分原因。

有关如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:1)

找到我自己的问题的解决方案。基本上,需要学习如何使用execute属性。任何其他JSF 2.0 n00bs的教训都是使用execute来有选择地重新处理页面。使用execute,您可以创建一个以空格分隔的组件ID列表,这些组件ID应将其值重新绑定到辅助bean,以防它们需要在响应AJAX事件的侦听器中使用。在我的例子中,这意味着更改jsFunction标记如下:

<a4j:jsFunction name="jsFunc"
execute="species_name individualUserStr"
render="species_name individualUserStr"
actionListener="#{individualsBean.selectedIndividualElem.assignDefaultNickname}"/>

正如您所看到的,现在jsFunction在调用assignDefaultNickname函数时将首先更新绑定到auto-complete和inputText组件的值,然后运行assignDefaultNickname。