Projets
Pages enfant
  • 3.3.5 Écriture du code d'accès aux objets métiers

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

esup-commons préconise le développement en couches :

  Image Added

Accès aux données

Pour pouvoir avoir accès à l'objet Entry donné en exemple au paragraphe précédent la couche métier doit disposer de méthodes dans l'interface DaoService.

Cela se traduira, par exemple, par deux méthodes permettant, d'une part, d'ajouter une Entry en base de donnée et, d'autre part de récupérer les objets Entry depuis la base de données :

Bloc de code

void addEntry(Entry entry);
List<Entry> getEntries();

Ces deux méthodes de l'interface doivent se retrouver dans son implémentation concrète (par exemple HibernateDaoService).

Service métier

Ensuite, ce sont les contrôleurs qui vont avoir besoin de dialoguer avec la couche métier.A nouveau, nous allons passer par une interface (DomainService) qui, par exemple, définira ces deux méthodes :

Bloc de code

Entry addEntry(String value)
List<Entry> getEntries()

Ces deux méthodes seront implémentées dans une classe concrète (par exemple  DomainServiceImpl).

Info

Ici la couche métier n'apporte pas beaucoup de service. Typiquement, la méthode addEntry() prend en paramètre une chaînes de caractères, crée une instance de la classe Entry, (new Entry()) lui donne la valeur passée en paramètre et la date courante puis la passe à la couche de persistance (la date courante sera obtenue grâce à new Timestamp(System.currentTimeMillis())).

 

exercice
Implémenter les méthodes d'accès aux données
Implémenter les méthodes d'accès aux données

Écrire les méthodes ci-dessus dans les classes ad hoc.

solution

Ajouter à l'interface DaoService :

Bloc de code

void addEntry(Entry entry);
List<Entry> getEntries();

Ajouter dans la classe HibernateDaoServiceImpl:

Bloc de code

void addEntry(Entry entry) {
 addObject(entry);
}

List<Entry> getEntries() {
 return getHibernateTemplate().loadAll(Entry.class);
}

Ajouter à l'interface DomainService :

Bloc de code

Entry addEntry(String value);
List<Entry> getEntries();

Ajouter dans la classe DomainServiceImpl:

Bloc de code

Entry addEntry(String value) {
  Entry entry = new Entry();
  entry.setValue(value);
  entry.setDate(new Timestamp(System.currentTimeMillis()));
  daoService.addEntry(entry);
  return entry;
}

List<Entry> getEntries() {
  return daoService.getEntries();
}

exercice
Ajouter une entrée dans la base de données
Ajouter une entrée dans la base de données

Faire en sorte que l'appui sur le bouton de test1.jsp enregistre la valeur de test1Controller.myInput comme une nouvelle instance de Entry dans la base de données.

Contrôler la présence d'une nouvelle entrée dans la base de données à chaque clic.

solution

Modifier la page test1.jsp

Bloc de code

<%@include file="_include.jsp"%>
<e:page stringsVar="msgs" menuItem="test1"
  locale="#{sessionController.locale}">
  <%@include file="_navigation.jsp"%>
  <h:form>
 	<e:messages/>
	<e:inputText value="#{test1Controller.myInput}"/>
	<e:commandButton value="#{msgs['MESSAGE.ENTRY.SAVE']}"
		action="#{test1Controller.addEntry}"/>
	<e:commandButton value="SetTest2Value"
		action="goToTest2">
        	<t:updateActionListener value="#{test1Controller.myInput}"
				property="#{test2Controller.value}"/>
	</e:commandButton>
  </h:form>
</e:page>

Ajouter dans Test1Controller la méthode addEntry

Bloc de code

/**
 * Add an entry.
 */
public void addEntry() {
  getDomainService().addEntry(getMyInput());

}



 

exercice
Afficher sur une page JSF une liste de données de la base
Afficher sur une page JSF une liste de données de la base

Afficher les objets de type Entry de la base de données sous forme d'une liste en dessous du bouton de test1.jsp.

On doit pour cela parcourir les entrées à l'aide de :

Bloc de code

<t:dataList value="#{test1Controller.entries}" var="entry">
  <e:li value="#{entry.value} (#{entry.date})" />
</t:dataList>
solution

Ajouter dans Test1Controller la méthode getEntries

Bloc de code

/**
 * @return List<Entry>
 */
public List<Entry> getEntries() {
  return getDomainService().getEntries();
}