JEE Approfondi LIMA LOPES Fabrice – MARTINS Sylvie – SOW Demba I. a. b. c. d. e. f. II. a. b. c. d. e. Programmation WEB évènementielle Notion de composant Semblable aux applications bureautiques Prise en charge de manière transparente de nombreuses problématiques le développeur de se concentrer sur la partie métier Pas de servlet ! Toujours deux représentations : Logique (.java) : code métier de la page Graphique (.tml ou .html) : vue de la page Exemple : • index.java • index.tml ou index.html Une page .tml (ou .html) est composée de composants A chaque composant est associé un évènement (eventhandler) Toute action sur un des composants déclenche la logique associée Injection de dépendance pour les messages de validation et l’internationalisation N’importe quelle méthode peut servir de Annotation @onEvent + id du composant eventhandler • index.tml <t:form t:id="loginForm"> <t:textfield t:value="message"/> <input type="submit" value="Submit"/> </t:form> • index.java @OnEvent(value="submit", component="loginForm") void onFormSubmit() { System.out.println("Handling form submission!"); } Quand pas de jdk5 : ◦ Règle de nommage 1. Ecrire le type d’évènement (ex : onSubmit) 2. Ajouter la provenance de l’évènement: From 3. Mettre l’id du composant : (ex : LoginForm) void onSubmitFromLoginForm(){} Beanediform : création d’un formulaire via pojo ◦ <t:loop> : List en paramètre qui a le même principe que le for each de la jstl ◦ <t:if> " " ◦ Devine le type de champs qu'il doit utiliser ◦ Customisable : exclude : éliminer des colonnes add : ajouter des colonnes reorder : imposer un ordre ◦ Forcer le rendu <t:parameter> <!-- Fournir ici l'implementation -- > <t:paramerter> <t:beaneditform object="contact" submitLabel = "Ajouter" reorder="nom,prenom,mobile,mail,commentaire"> <t:parameter name="commentaire"> <t:label for="commentaire"/> <t:textarea t:id="commentaire" t:value="contact.commentaire" cols="30" rows="5" /> </t:parameter> </t:beaneditform> Pareil mais objet de type collection au lieu du pojo Presque les mêmes propriétés Pagination automatique : rowsperpage ! <t:grid t:source="allContact" exclude="id,commentaire" row="contact" rowsPerPage="8" reorder="nom,prenom,mobile,mail" add="delete" pagerPosition="bottom" > <t:parameter name="nomCell"> <t:pagelink t:page="DetailsPage" t:context="contact.id">${contact.nom} </t:pagelink> </t:parameter> </t:grid> t:validate=required ◦ Si pas renseigné Erreur ◦ Spécification dans le fichier app.Property @ApplicationState : met en session @Persist : garde objet pour la prochaine page(POST) @Inject : injection des dépendances @Component : référence sur un objet composant onActivate & onPassivate : garde objet pour la prochaine page(GET) Prise en main rapide Concept simple Environnement familier Génération automatique des tâches redondantes Faible communauté peu de ressources Transformation : modèle relationnel modèle objet Création couche abstraction (appelé couche de persistance) : couche entre application et la base de données Séparation des tâches Application Persistence Object Hibernate Hibernate.properties Database XML Mapping ORM (Object Relational Mapping) Domaine Objet Contact Domaine Relationnel contact.hbm.xml Table Contact Langage de requêtage d’Hibernate Ressemble fortement au SQL Requête sur champ d’une table de la BDD Totalement orienté objet Héritage Polymorphisme Association Semblable à HQL Requête sur objet Mais, écriture beaucoup plus orientée objet Exemple HQL Query query = sessionCreateQuery("from contact when contact.id=:id"); Query.setInteger("id", id) Exemple Criteria Criteria crit = session.createCriteria ( Contact.class); Crit.add(Expression.ilike("contactLogin",id)); Contrôle : Hibernate permet l’interdiction de modifier ou insérer une propriété. <property name=« id» column=« contact_id» ◦ Insert = false ◦ Update=false ◦ > Association : Hibernate prend en charge les associations entre table sous forme de tag ◦ <one to many name=« ..» class=« » key=« »/> ◦ <many to many « ….. »> Component Une instance d’un table devient un objet Cet objet peut aussi être une composition d’objet. <property name=« client_nom» column=« Client_nom» <component name=« adresse» <property …… Très puissant Facile à prendre en main Grande communauté de développeurs Mises à jours récurrentes