什么是使用转换器的好方法?

时间:2012-02-20 15:56:41

标签: jsf-2 converter

例如,我有3个相关的表,并且我在这些表填充的不同页面中有selectonemenus。要用对象填充selectonemenus,我需要转换器。在编写转换器时,考虑内存消耗的正常方法是什么?我的意思是转换器中的值应该是什么?

1 个答案:

答案 0 :(得分:1)

  

我的意思是转换器中的值应该是什么?

无。转换器本身不应该保持任何状态(当然期望注入的实体服务/ DAO)。

getAsString()必须直接返回实体本身已知的实体的唯一标识符。即它是实体本身的属性,可以唯一地表示为String

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    Entity entity = (Entity) value;
    return entity.getId() != null ? String.valueOf(entity.getId()) : null;
}

getAsObject()必须只返回由其唯一标识符关联的实体。这通常是通过从服务/ DAO层获取它来完成的。

@Override
public String getAsObject(FacesContext context, UIComponent component, String value) {
    Long id = Long.valueOf(value);
    return entityService.find(id);
}

getAsObject()中使用service / DAO的另一种方法是从<f:selectItems>获取它,以便可以避免任何不必要的DB调用。另请参阅Avoid extra DB reads in the getAsObject method of converter class by caching data client side?