电话号码:自动完成对全球实体转换器 [英] p:autocomplete for a global Entity Converter
本文介绍了电话号码:自动完成对全球实体转换器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想建立一个p:自动完成从一个实体搜索不同的对象。
如客户,文章....
I want to build a p:autocomplete for searching different objects from a entities. Like customer, article....
的检索工作良好并且实体将出现。
但仍转换器doesn't的工作。
The searching works well and the entities will appear. But still the converter doesn´t work.
下面我code:
<p:autoComplete id="searchStartpage" size="35" maxlength="200"
queryDelay="0" maxResults="10" minQueryLength="1"
value="#{searchGeneralRequestController.selectedObject}"
completeMethod="#{searchGeneralRequestController.completeObject}"
var="o" itemLabel="#{object.id}" itemValue="#{object}"
converter="objectForSearchConverter" forceSelection="false"
itemtipMyPosition="left center" cache="false"
itemtipAtPosition="right center">
<p:ajax event="itemSelect"
listener="#{searchGeneralRequestController.handleSelect}" />
<p:column rendered="#{o.getClass().getSimpleName() == 'Mandatory'}">
#{o.surname} #{o.name}
</p:column>
<p:column rendered="#{o.getClass().getSimpleName() == 'Article'}">
#{o.name}
</p:column>
</p:autoComplete>
在这里,我的转换器:
And here my Converter:
public Object getAsObject(FacesContext facesContext, UIComponent component,
String submittedValue) {
if (submittedValue.trim().equals("")) {
return null;
} else {
try {
// searchValue = submittedValue;
int number = Integer.parseInt(submittedValue);
for (Object p : objectList) {
if (p instanceof Article) {
Article article = (Article) p;
if (article.getId() == number) {
return p;
}
}
if (p instanceof Customer) {
Customer customer = (Customer) p;
if (customer.getId() == number) {
return p;
}
}
if (p instanceof User) {
User user = (User) p;
if (user.getId() == number) {
return p;
}
}
if (p instanceof Mandatory) {
Mandatory mandatory = (Mandatory) p;
if (mandatory.getId() == number) {
return p;
}
}
}
} catch (NumberFormatException exception) {
throw new ConverterException(new FacesMessage(
FacesMessage.SEVERITY_ERROR, "Conversion Error",
"Not a valid player"));
}
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
if (value == null || value.equals("")) {
return "";
} else {
Long id = (value instanceof Mandatory) ? ((Mandatory) value)
.getId() : null;
return (id != null) ? String.valueOf(id) : null;
}
}
我所有的实体都散列和字符串的方法。
对象值总是空
All my entities have hash and string method. The Object value is always null
任何人可以帮助,请
推荐答案
有关自动完成
试试这个通用变频器
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;
import java.util.WeakHashMap;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
@FacesConverter(value = "entityConverter")
public class EntityConverter implements Converter {
private static Map<Object, String> entities = new WeakHashMap<Object, String>();
@Override
public String getAsString(FacesContext context, UIComponent component, Object entity) {
synchronized (entities) {
if (!entities.containsKey(entity)) {
String uuid = UUID.randomUUID().toString();
entities.put(entity, uuid);
return uuid;
} else {
return entities.get(entity);
}
}
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String uuid) {
for (Entry<Object, String> entry : entities.entrySet()) {
if (entry.getValue().equals(uuid)) {
return entry.getKey();
}
}
return null;
}
}
这篇关于电话号码:自动完成对全球实体转换器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文