我想在搜索引擎中插入基于以下内容的自动填充功能。亚型动物清单。我创建了这段代码:
<p:outputLabel value="Animals subtype:" />
<p:autoComplete id="animals" value="#{search.animalssubtype}" completeMethod="#{zonetable.completeAnimalSubtype}" />
(其中search.animalssubtype是value是搜索条件的值),一切正常。我现在想把它变成一个分组,这里出现“楼梯”。试着这样做:
<p:outputLabel value="Animals :" />
<p:autoComplete id="animals " value="#{search.animalssubtype}" completeMethod="#{zonetable.findAllAnimal}"
itemLabel="#{zonetable.findAllAnimal.subtype}" itemValue="#{zonetable.findAllAnimal.subtype}"
groupBy="#{zonetable.findAllAnimal.type}"/>
它工作正常,但在标签中我明白了:
Animal{id=1,type=01, subtype=011 ...}
我试着这样做:
<p:outputLabel value="Animals :" />
<p:autoComplete id="animals " value="#{model.animal}" completeMethod="#{zonetable.findAllAnimal}"
var="an" itemLabel="#{an.subtype}" itemValue="#{an.subtype}"
groupBy="#{an.type}"/>
(其中model.animal是新的实例对象Animal [Animal animal = new Animal()])并且标签显示正确,但我不知道如何将值保存到“search.animalssubtype”。你能告诉我怎么做吗?
答案 0 :(得分:0)
我相信你需要使用converter
来实现这一目标。
鉴于您的代码摘录,我无法发布任何有效的代码。但是,代码应该看起来像这样:
<p:outputLabel value="Animals :" />
<p:autoComplete id="animals"
value="#{search.animalssubtype}"
completeMethod="#{zonetable.findAllAnimal}"
converter="#{animalConverter}
itemLabel="#{animalssubtype.name}"
itemValue="#{animalssubtype}"/>
这是转换器的一个例子:
@Named("animalConverter")
@RequestScoped
public class AnimalConverter implements Converter {
@Inject
private Service service;
@Inject
private Search search;
@Override
public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String s) {
try {
Long id = NumberUtils.createLong(s);
if(id == null) {
return search.getAnimal();
}
return service.find(id);
} catch (NumberFormatException e) {
// ignore!
return search.getAnimal();
}
}
@Override
public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object o) {
String result = "";
if (o != null && o instanceof Animal) {
Animal animal = (Animal) o;
result = String.valueOf(animal.getId());
}
return result;
}
}