我是JSF的新手,想知道我是否正確。比方說,我有一個簡單的CMS,可以編寫頁面。如何通過JSF和JPA避免模型代碼重複
首先,我定義了一個稱爲頁JPA實體:
@Entity
public class Page {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private Long id;
@Column private String title;
@Column private String content;
// getters & setters ...
}
然後,我想在一個視圖中創建頁面-S。爲此,它看起來像我需要某種頁面bean。現在我處理這樣的事情:
@Model
public class PageBean {
private Page page = new Page();
public String getTitle() {
return page.getTitle();
}
public void setTitle(String title) {
page.setTitle(title);
}
// rest of properties & getters & setters ...
public void save() {
// persist using EntityManager
}
}
我的問題是下面的一個:因爲我的JPA實體模型,我想在視圖中使用該模型是大部分時間完全一樣,有沒有避免必須在PageBean中創建一批getter & setter?
我在某處讀過你不應該使用與JPA實體和JSF模型bean相同的bean(因爲JSF會對可能影響JPA的getter重複調用),但我不知道是否沒有簡單的方法可以幫助避免這種代碼重複。特別是當你有一個大型模型的應用程序,並且在很多情況下,在視圖bean中不需要任何特殊的東西時,看起來這樣會變得非常麻煩。
的'#{myBean.page.title}'正是他需要的,就已經足夠作爲整個答案的擁有。大多數JSF/EL-starters沒有意識到「深度鏈接」getter的能力,因此認爲有必要將管理bean中的實體展平/錘擊。 – BalusC 2010-07-13 11:35:59
我知道他從開始想要什麼。但是我認爲,一旦你意識到自己在做什麼以及它的影響,你就應該能夠深入鏈接。這就是爲什麼我在回答之前寫下「免責聲明」部分的原因。我在後臺bean中使用了很多深層鏈接,但是當涉及到訪問域模型中的字段時,我會考慮兩次。 – pakore 2010-07-13 11:47:08