Chcę uniknąć kodu płyty kotła w celu utworzenia listy elementów SelectItem, aby odwzorować moje jednostki/dtos między widokiem i modelem, więc użyłem tego snippet generycznego konwertera obiektów:Argumenty przeciwko typowemu konwerterowi obiektów JSF ze statycznym atrybutem WeakHashMap
@FacesConverter(value = "objectConverter")
public class ObjectConverter 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;
}
}
Istnieje już wiele answers dla pytań similliar, ale chcę waniliowy roztwór (bez * twarzy). Poniższe punkty nadal pozostawiają mi pewności co do jakości moim fragmencie:
- Gdyby to było takie proste, to dlaczego nie istnieje ogólny obiekt zbudować konwerter do JSF?
- Dlaczego tak wielu ludzi wciąż używa numeru SelectItems? Czy nie ma większej elastyczności dzięki zastosowaniu podejścia generycznego? Na przykład. # {dto.label} można szybko zmienić na # {dto.otherLabel}.
- Biorąc pod uwagę, że chodzi tylko o zmapowanie widoku i modelu, czy istnieje jakaś główna wada podejścia generycznego?