0
例如,我有3個相關的表格,並且在由這些表格填充的不同頁面中有selectonemenus。要使用對象填充selectonemenus,我需要轉換器。在編寫轉換器時,考慮內存消耗的體面方式是什麼?我的意思是什麼值應該在轉換器?什麼是使用轉換器體面的方式?
例如,我有3個相關的表格,並且在由這些表格填充的不同頁面中有selectonemenus。要使用對象填充selectonemenus,我需要轉換器。在編寫轉換器時,考慮內存消耗的體面方式是什麼?我的意思是什麼值應該在轉換器?什麼是使用轉換器體面的方式?
我的意思是什麼值應該在轉換器?
沒有。轉換器本身不應保持任何狀態(當然期望注入的實體服務/ 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?
感謝您的明確答覆。那麼這個實體與其他實體有什麼關係呢?如果我沒有將它們設置在第一個實體的轉換器中,我無法到達其他實體的ID。我應該在第一個實體的轉換器中定義第二個實體的唯一ID嗎?還是有其他方法可以做到這一點? – lamostreta 2012-02-20 22:54:17
我不確定我是否瞭解具體問題。什麼是功能要求? – BalusC 2012-02-20 23:10:24
對不起,我不清楚的答案:)如果我有2個POJO和第一個POJO的轉換器,是否必須添加第二個的唯一ID?我可以避免向第一個轉換器添加另一個字段(第二個類的ID)嗎?我希望我能解釋.. – lamostreta 2012-02-20 23:26:20