2012-02-20 10 views
0

例如,我有3個相關的表格,並且在由這些表格填充的不同頁面中有selectonemenus。要使用對象填充selectonemenus,我需要轉換器。在編寫轉換器時,考慮內存消耗的體面方式是什麼?我的意思是什麼值應該在轉換器?什麼是使用轉換器體面的方式?

回答

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()使用服務/ DAO另一種方法是從<f:selectItems>使任何不必要的DB調用可以避免得到它。另請參閱Avoid extra DB reads in the getAsObject method of converter class by caching data client side?

+0

感謝您的明確答覆。那麼這個實體與其他實體有什麼關係呢?如果我沒有將它們設置在第一個實體的轉換器中,我無法到達其他實體的ID。我應該在第一個實體的轉換器中定義第二個實體的唯一ID嗎?還是有其他方法可以做到這一點? – lamostreta 2012-02-20 22:54:17

+0

我不確定我是否瞭解具體問題。什麼是功能要求? – BalusC 2012-02-20 23:10:24

+0

對不起,我不清楚的答案:)如果我有2個POJO和第一個POJO的轉換器,是否必須添加第二個的唯一ID?我可以避免向第一個轉換器添加另一個字段(第二個類的ID)嗎?我希望我能解釋.. – lamostreta 2012-02-20 23:26:20

相關問題