JSF2:有没有办法使用a4j:param with rich:select或h:selectOneMenu

时间:2011-04-27 20:33:04

标签: ajax jsf-2 richfaces ajax4jsf

是否可以使用下拉菜单,还是依赖于实现ActionSource的父对象,因为f:setPropertyActionLister是?

理想情况下,我会做以下事情:

<h:selectOneMenu value="#{myCustomBean.selectedItemIndex}">
    <f:selectItems value="#{adminLetterAdminBean.missingSettings}" var="n" itemValue="#{n.id}" itemLabel="#{n.name}"/>
    <f:setPropertyActionListener value="42" target="#{adminLetterAdminBean.someProperty}" />
    <a4j:ajax />
</rich:select>

但是这不起作用,因为h:selectOneMenu没有实现javax.faces.component.ActionSource。页面没有呈现,它给了我一个友好的堆栈跟踪来告诉我这种依赖。

在Richfaces文档中没有看到有关此约束的任何内容,我尝试了以下内容:

<h:selectOneMenu value="#{myCustomBean.selectedItemIndex}">
    <f:selectItems value="#{adminLetterAdminBean.missingSettings}" var="n" itemValue="#{n.id}" itemLabel="#{n.name}"/>
    <a4j:param assignTo="#{adminLetterAdminBean.someProperty}" value="42" name="randomRequestParamName"/>
    <a4j:ajax />
</rich:select>

这不会爆炸,但它也会设置属性。我想知道是否有类似的方式设置(或多个)属性。

2 个答案:

答案 0 :(得分:1)

a4j:param只能嵌套在一个动作组件中,例如a4j:commandButton,a4j:commandLink和a4j:jsFunction。您也可以将它与标准按钮/链接组件一起使用。

答案 1 :(得分:0)

我有一个类似的问题。我的页面必须在自动完成请求完成之前传输有关自动填充的信息。我通过使用jsFunction实现了这一点。我的自动填充功能如下:

<rich:autocomplete mode="ajax" showButton="true" value="#{conf.fieldValue}" 
      autocompleteMethod="#{BackingBean.search.autocomplete}" 
      minChars="3" onfocus="sendInfo('#{conf.label}')">
</rich:autocomplete>

根据conf.label(conf是forEach变量),自动完成方法中的辅助bean会获取不同的数据。

此信息的传输由jsFunction完成(在自动完成声明之后):

<a4j:jsFunction name="sendInfo">
     <a4j:param name="param1" assignTo="#{BackingBean.search.currentAutocomplete}"/>
</a4j:jsFunction>

只是,当用户将焦点放在特定的自动完成时,“sendInfo”将使用绑定到辅助bean的一个参数执行。