Java Primefaces 选项列表转换器
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/23211618/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Primefaces Picklist Converter
提问by user3172567
I am using Primefaces 4.0 and JSF 2.2. I used a picklist with a converter. The problem is that I don't get the correct arg2
in my converter. It always says 0
. My expectation is that this is the id of the element and I could parse it out of source/target lists. Any Ideas?
我正在使用 Primefaces 4.0 和 JSF 2.2。我使用了带有转换器的选择列表。问题是arg2
我的转换器没有得到正确的结果。它总是说0
。我的期望是这是元素的 id,我可以从源/目标列表中解析它。有任何想法吗?
My Converter
is inspired by How to write a custom converter for <p:pickList>.
我Converter
的灵感来自如何为 <p:pickList> 编写自定义转换器。
My Picklist declaration is as follows:
我的选择列表声明如下:
<p:pickList value="#{loadingPlaceGroups.pickList}"
style="margin:0" var="loadingPlace"
converter="primeFacesPickListConverter"
itemValue="#{loadingPlace}"
itemLabel="#{loadingPlace.name}#{loadingPlace.location.address.street}#{loadingPlace.location.address.houseNr}#{loadingPlace.location.address.zipCode}#{loadingPlace.location.address.city}"
showSourceFilter="true" showTargetFilter="true"
filterMatchMode="contains"
styleClass="picklist500x350source picklist500x350target">
<f:facet name="sourceCaption">Alle Ladestellen</f:facet>
<f:facet name="targetCaption">Gew?hlte Ladestellen</f:facet>
<p:column style="border-bottom:1px solid lightgray">
<p:panelGrid>
<p:row>
<p:column style="padding-left:0;font-size:12pt">
<h:outputLabel value="#{loadingPlace.name}"
style="font-weight:bold" />
</p:column>
</p:row>
<p:row>
<p:column style="padding:0">
<h:outputLabel
value="#{loadingPlace.location.address.street} #{loadingPlace.location.address.houseNr}" />
</p:column>
</p:row>
<p:row>
<p:column style="padding:0">
<h:outputLabel
value="#{loadingPlace.location.address.zipCode} #{loadingPlace.location.address.city}" />
</p:column>
</p:row>
</p:panelGrid>
</p:column>
</p:pickList>
采纳答案by Makky
For picklist use this generic converter
:
对于选择列表使用这个generic converter
:
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;
}
}