Vous regardez une version antérieure (v. /wiki/pages/viewpage.action?pageId=100663545) de cette page.
afficher les différences
afficher l'historique de la page
« Afficher la version précédente
Vous regardez la version actuelle de cette page. (v. 4)
afficher la version suivante »
Sommaire :
esup-commons préconise le développement en couches :
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 :
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 :
Entry addEntry(String value)
List<Entry> getEntries()
Ces deux méthodes seront implémentées dans une classe concrète (par exemple DomainServiceImpl).
Exercice : Implémenter les méthodes d'accès aux données |
Afficher l'énoncéCacher l'énoncé
|
Écrire les méthodes ci-dessus dans les classes ad hoc.
Solution : |
Afficher la solutionCacher la solution
|
Ajouter à l'interface DaoService :
void addEntry(Entry entry);
List<Entry> getEntries();
Ajouter dans la classe HibernateDaoServiceImpl:
void addEntry(Entry entry) {
addObject(entry);
}
List<Entry> getEntries() {
return getHibernateTemplate().loadAll(Entry.class);
}
Ajouter à l'interface DomainService :
Entry addEntry(String value);
List<Entry> getEntries();
Ajouter dans la classe DomainServiceImpl:
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 |
Afficher l'énoncéCacher l'énoncé
|
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 : |
Afficher la solutionCacher la solution
|
Modifier la page test1.jsp
<%@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
/**
* Add an entry.
*/
public void addEntry() {
getDomainService().addEntry(getMyInput());
}
|
|
Exercice : Afficher sur une page JSF une liste de données de la base |
Afficher l'énoncéCacher l'énoncé
|
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 :
<t:dataList value="#{test1Controller.entries}" var="entry">
<e:li value="#{entry.value} (#{entry.date})" />
</t:dataList>
Solution : |
Afficher la solutionCacher la solution
|
Ajouter dans Test1Controller la méthode getEntries
/**
* @return List<Entry>
*/
public List<Entry> getEntries() {
return getDomainService().getEntries();
}
|
|