多功能环境中的javax.faces.convert.Converter
我的自定义转换器有问题多功能环境中的javax.faces.convert.Converter,java,multi-tenant,converters,Java,Multi Tenant,Converters,我的自定义转换器有问题 @FacesConverter(value = "converterObjet") public class ConverterObjet implements Converter { private static Map<Object, String> listObjet = new WeakHashMap<Object, String>(); @Override public String getAsString(F
@FacesConverter(value = "converterObjet")
public class ConverterObjet implements Converter {
private static Map<Object, String> listObjet = new WeakHashMap<Object, String>();
@Override
public String getAsString(FacesContext context, UIComponent component, Object entity) {
synchronized (listObjet) {
if (!listObjet.containsKey(entity)) {
String uuid = UUID.randomUUID().toString();
listObjet.put(entity, uuid);
return uuid;
} else {
return listObjet.get(entity);
}
}
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String uuid) {
for (Entry<Object, String> entry : listObjet.entrySet()) {
if (entry.getValue().equals(uuid)) {
return entry.getKey();
}
}
return null;
}
@多租户(每个租户的多租户类型表)
@TenantTableDiscriminator(type=TenantTableDiscriminatorType.SCHEMA,contextProperty=“租户id”)
公共类控件实现可序列化{
hashCode()对于具有相同id的所有租户配置是相同的
@Override
public int hashCode() {
// TODO Auto-generated method stub
final int prime = 31;
int hash = 17;
hash = hash * prime+ this.idpays.hashCode();
return hash;
}
我在XHTML页面中使用的转换器如下:
<p:selectOneMenu widgetVar="wvCtrcdt" id="contry"
height="150" value="#{candidatView.contryChoosen}"
converter="converterObjet" filter="true">
<f:selectItem itemLabel="#{text['chxInit']}" itemValue=""></f:selectItem>
<f:selectItems value="#{contryView.listcontry}" var="contry"
itemLabel="#{contry.contryname}" itemValue="#{contry}"></f:selectItems>
<p:ajax update="PoBirth" />
</p:selectOneMenu>
转换器返回的contryChoosen不是来自当前租户,因为它被认为在地图中已经存在,因为它具有与第一个租户所在国家/地区相同的id。
问题是我如何定制我的转换器,这样它就可以区分租户国家,即使他们有相同的id?而不是在地图中添加tennant前缀,从而使I'd唯一。这实际上不是JSF的问题,而是java中的一个通用“问题”…是的,你绝对正确。我就是这么做的!
<p:selectOneMenu widgetVar="wvCtrcdt" id="contry"
height="150" value="#{candidatView.contryChoosen}"
converter="converterObjet" filter="true">
<f:selectItem itemLabel="#{text['chxInit']}" itemValue=""></f:selectItem>
<f:selectItems value="#{contryView.listcontry}" var="contry"
itemLabel="#{contry.contryname}" itemValue="#{contry}"></f:selectItems>
<p:ajax update="PoBirth" />
</p:selectOneMenu>