0

我想用来<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>

自动完成方法返回一个 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' 始终为空。

我怎样才能在方法中拥有这个新的选定值?

谢谢

4

1 回答 1

0

有一个更简单的方法。

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

ajax 确保值在被选中时更新。如果您使用的不是字符串,则可以使用转换器:

@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();
    }

}
于 2013-11-11T12:45:23.943 回答