我想使用<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
答案 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();
}
}