javax.faces.convert.Converter в многопользовательской среде - PullRequest
0 голосов
/ 27 апреля 2018

У меня проблема с моим пользовательским конвертером.

@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;
    }

проблема в статической карте.

как я использую схему для каждого арендатора

@Entity

@ Многоквартирный (MultitenantType.TABLE_PER_TENANT) @TenantTableDiscriminator (type = TenantTableDiscriminatorType.SCHEMA, contextProperty = "tenant-id") открытый класс Contry реализует Serializable {

hashCode () одинаков для всех контингентов арендаторов с одинаковым идентификатором

@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, возвращаемый преобразователем, не принадлежит текущему арендатору, поскольку считается, что он уже существует на карте, поскольку у него тот же идентификатор страны первого арендатора. вопрос в том, как настроить мой конвертер, чтобы он мог различать страну-арендатора, даже если у них одинаковый идентификатор?

...