将新选择的值作为参数传递给rich:autocomplete上的'onchange'方法

时间:2013-11-08 10:17:36

标签: richfaces

我想使用<rich:autocomplete>从列表中选择项目,并在选择新值时调用操作方法(在方法中使用此新值)。

我有这样的事情:

<rich:autocomplete mode="cachedAjax" minChars="2"
    autocompleteMethod="#{bean.autocompleteMethod}"
    fetchValue="#{var.name}"
    var="var">
    <rich:column>
        <h:outputText value="#{var.name}" />
    </rich:column>
</rich:autocomplete>

autocomplete方法返回MyObject列表:

public List<MyObject> autocompleteMethod(String prefix){
    //...
    return results;
}

我想创建一个方法,当选择一个新的列表值时调用该方法,但我尝试的所有方法都不起作用,因为我不知道如何将新选择的值传递给bean。

我尝试使用onchange="changeMethod('#{var.id}')"并制作如下函数:

<a4j:jsFunction name="changeMethod"
    action="#{bean.changeMethod}">
    <a4j:param name="param1" assignTo="#{bean.idParam}" />
</a4j:jsFunction>

它也不适用于onselectitem,'idParam'始终为空。

如何在方法中使用这个新的选定值?

THX

1 个答案:

答案 0 :(得分:0)

有一种更简单的方法。

<rich:autocomplete autocompleteMethod="#{bean.autocompleteMethod}" value="#{bean.value}">
    <a4j:ajax event="selectitem" />
</rich:autocomplete>

ajax确保选中时值会更新。如果您使用的是String以外的其他东西,则可以使用转换器:

@FacesConverter("someConverter")
public class SomeConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        // find/create object by name;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value {          
        return ((MyObject) value).getName();
    }

}