Я новичок в JSF, и мне интересно, правильно ли я понял. Предположим, у меня простая CMS, которая позволяет писать страницы.Как избежать дублирования кода модели с JSF и JPA
Во-первых, я определяю сущность JPA под названием Page:
@Entity
public class Page {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private Long id;
@Column private String title;
@Column private String content;
// getters & setters ...
}
Тогда я хотел бы в целях создания страницы-х годов. Для этого, похоже, мне нужен какой-то компонент страницы. Сейчас я обращался вещи, как это:
@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?
Я где-то читал, что вы не должны использовать один и тот же компонент в качестве объекта JPA и JSF-модели (поскольку JSF выполняет повторные вызовы для геттеров, которые могут повлиять на JPA), но я действительно задаюсь вопросом, нет ли более простого способа, который помог бы избегая такого рода дублирования кода. Особенно, когда у вас есть приложение с большой моделью и во многих случаях не требуется ничего особенного в представлении beans, похоже, что это может стать довольно громоздким.
Параметр '# {myBean.page.title}' именно то, что ему нужно, и было бы уже достаточно, как весь ответ на ее своя. Большинство JSF/EL-starters не знают о возможности «развязывания» геттеров и, таким образом, считают, что необходимо сгладить/забивать объекты в управляемом компоненте. – BalusC
Я знаю, чего он хотел с самого начала. Но я думаю, что вы должны иметь возможность deeplink, как только вы осознаете, что вы делаете, и его последствия. Вот почему я написал часть «отказ от ответственности» перед ответом. Я использую большое количество deeplinking внутри бэкэндов, но когда дело доходит до доступа к полям в модели домена, я думаю об этом дважды. – pakore