Je suis nouveau à JSF et je me demande si j'ai bien compris. Disons que j'ai un simple CMS qui permet d'écrire des pages.comment éviter la duplication de code modèle avec JSF et JPA
D'abord, je définir une entité JPA appelé Page:
@Entity
public class Page {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private Long id;
@Column private String title;
@Column private String content;
// getters & setters ...
}
Ensuite, je voudrais en vue de créer la page-s. Pour cela, il semble que j'ai besoin d'un bean page de quelque sorte. Pour l'instant je me suis occupé des choses comme ça:
@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
}
}
Ma question est la suivante: étant donné que mon modèle d'entité JPA et le modèle que je veux utiliser dans les vues sont la plupart du temps exactement la même chose, est-il façon d'éviter d'avoir à créer un lot de getters & setters dans le PageBean? J'ai lu quelque part que vous ne devriez pas utiliser le même bean que l'entité JPA et le bean modèle JSF (parce que JSF fait des appels répétés aux getters qui peuvent affecter JPA), mais je me demande s'il n'y a pas un moyen plus simple éviter ce genre de duplication de code. Surtout quand vous avez une application avec un grand modèle et dans de nombreux cas ne nécessitent pas de spécial dans les beans de vue, il semble que cela peut devenir assez lourd.
Le '# {myBean.page.title}' est exactement ce qu'il faut et serait déjà suffisante réponse entière à sa posséder. La plupart des démarreurs JSF/EL ne sont pas conscients de la possibilité de "fondre" les getters et pensent donc qu'il est nécessaire d'aplatir/marteler les entités dans le bean géré. – BalusC
Je sais ce qu'il voulait depuis le début. Mais je pense que vous devriez être en mesure d'approfondir une fois que vous êtes conscient de ce que vous faites et de ses implications. C'est pourquoi j'ai écrit la partie "disclaimer" avant la réponse. J'utilise beaucoup de profondeur dans les backing beans, mais quand il s'agit d'accéder aux champs dans le modèle de domaine, j'y pense deux fois. – pakore