De quoi on parle ici ?


Je programme et c'est ma joie !

Le blog d'un mec qui mange du code toute la journée, et qui se dit que, quand même, ça serait bien d'en parler encore un peu une fois rentré à la maison.

 



L'intégralité des réalisations de l'auteur est libre de droit, toutes les ressources de ce site peuvent être exploitées sans aucun problème, c'est la fête, mec.

Les ressources extérieures utilisée sur le blog ou dans le projet sont à priori libres également. En cas d'erreur, sur simple demande, la ressource utilisée illégalement sera retirée du blog ou du projet, no souçaille.


Dimanche 28 mars 2010 7 28 /03 /Mars /2010 11:15
C'est un micro micro tip, parce qu'il est court et probablement assez connu, mais il est amusant, donc ça vaut le coup d'en parler.

Lorsque vous faites du JSF, dans votre document web.xml, vous allez déclarer le FacesServlet :
<servlet>
  <servlet-name>Faces Servlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
Et vous allez mapper les fichiers avec cette servlet :
<servlet-mapping>
   <servlet-name>Faces Servlet</servlet-name>
   <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
Le *.jsf représente l'extension de vos pages JSF. Vous naviguerez donc sur home.jsf, login.jsf etc.

Le truc amusant, c'est qu'à la place de *.jsf, vous pouvez mettre ce que vous voulez : *.html, *.php, ou même *.jeprogrammeetcestmajoie ...!

Cool non ?



tags : Java EE, JSF, MicroTips


Publié dans : Java
Ecrire un commentaire - Il y a 0 commentaires
Samedi 27 mars 2010 6 27 /03 /Mars /2010 15:25
Il existe déjà des milliers d'articles sur Facelets, la façon dont le framework est fait, etc..
Je ne vais donc en aborder qu'une fraction, celle qui est directement visible : la taglib ui.

J'avais déjà parlé d'un de ces tags dans un précédent article, je vais aller un peu plus loin ici.

En général, dans la partie Java d'une application web, les developpeurs découpent leur code en plusieurs classes (cohésion), mais, parallèlement vont faire tenir toute leur page dans un seul fichier html (ou xhtml, ou jsp etc..).

Voila ce qu'on tient à éviter :

Bad Code from unclebob on Vimeo.



Mettons que vous ayez sur la même page une datatable avec un certain nombre de colonnes, un formulaire pour ajouter une ligne dans cette table et un graphique pour afficher les valeurs de cette table. Ajoutez quelques contrôles pour modifier/supprimer les lignes, et que les valeurs de certaines listes du formulaire se réduisent en fonction d'autres valeurs.

Vous vous retrouvez avec une page bien fournie, d'au moins 500 lignes, et potentiellement très compliquée à lire d'une traite.

C'est la qu'intervient la magie Facelets : vous pouvez découper votre fichier en plein de petits bouts qui seront beaucoup plus facile à lire et maintenir, la page sera recomposée à la génération.

Découper son fichier avec <ui:component> et <ui:include>

 
L'idée ici est de faire une page principale qui sera celle visible par l'utilisateur (mettons : mapage.xhtml) et d'y inclure des bouts venants d'autres pages (exemple : mapage_datatable.xhtml, mapage_graphique.xhtml etc..).

mapage_datatable.xhtml :
<?xml version="1.0" encoding="ISO-8859-1"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets">

    <ui:component name="mapage_datatable">
      <!-- code de la datatable -->
    </ui:component>

    </ui:composition>

Dans mapage.xhtml, vous pourrez simplement inclure la datatable en faisant :
<ui:include src="chemin/vers/mapage_datatable.xhtml" />

Utiliser un template avec <ui:define> et <ui:insert>

 
L'utilisation d'un template avec facelets est beaucoup plus appliquée dans les projets que le découpage, le (bon) développeur ayant l'instinct d'éviter de copier/coller du code.

En général, vous voudrez mettre dans votre template vos css, scripts, le header, le menu et le footer, et placer dans la div générale le code suivant :
<ui:insert name="body">
  <!-- code par défaut -->
</ui:insert>
Si l'utilisateur pointe sur la page template, il verra le code par défaut.


Pour déclarer l'utilisation du template, il faut deux lignes :
<?xml version="1.0" encoding="ISO-8859-1"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets"
    template="chemin/vers/template.xhtml">

    <ui:define name="body">
      <!-- code de la page -->
    </ui:define>

</ui:component>

<ui:define> va  copier ce qui se trouve dans le tag à l'intérieur du tag <ui:insert> du template, dont le chemin est indiqué dans le tag <ui:composition>

En fait, le principe du template, est un petit peu l'inverse de l'inclusion :
  • L'inclusion colle des éléments dans la page qu'on visualise
  • Le templatage colle un template autour de la page qu'on visualise

Donc maintenant, vous savez : pour un code JSF propre, pensez Facelets !



tags : Java EE, JSF
Publié dans : Java
Ecrire un commentaire - Il y a 0 commentaires
Samedi 27 mars 2010 6 27 /03 /Mars /2010 15:12
Pour ce deuxième micro tip, je vais vous parler de la différence entre @PostConstruct et @Create dans un environnement Seam/EJB.

@PostConstruct est une annotation EJB3 qui indique que la méthode annotée sera invoquée après les injections de dépendances mais avant tout le reste.

@Create est une annotation Seam qui a le même comportement que @PostConstruct..
Du moins, à première vue !

En effet, dans un bean qui est à la fois EJB (@Stateless ou @Stateful) et Seam (@Name) l'ordre des injections est le suivant : d'abord les injections EJB, et ensuite, seulement, les injections Seam.

Du coup, si vous mettez sur ce bean un @PostConstruct, les injections Seam (@In mais aussi @Log) ne seront pas encore faites !

Moralité : dans un environnement Seam/Ejb, à moins d'une raison très particulière, préferez toujours @Create à @PostConstruct.



tags : Java EE, Seam, EJB3, MicroTips
Publié dans : Java
Ecrire un commentaire - Il y a 0 commentaires
Vendredi 26 mars 2010 5 26 /03 /Mars /2010 19:41
Je vous fournis une liste des ressources pour le développeur JEE qui m'ont beaucoup été utiles (note : certains sites datent un peu, donc tout n'est pas forcément à prendre au premier degré) :

Collections de tutoriaux



Communautaire



Blogs et flux RSS (en vrac)


Publié dans : Général
Ecrire un commentaire - Il y a 0 commentaires
Vendredi 26 mars 2010 5 26 /03 /Mars /2010 18:36
Pour ce premier micro tip, je vais vous parler d'un comportement du composant JSF <h:panelGrid> qui est un peu surprenant (en version 1.2, je ne sais pas pour la 2.0)

<h:panelGrid> est un tag qui permet de générer une <table> html en dynamique : vous décidez du nombre de colonnes, et il va mettre tout seul chaque élément contenu dans le tag dans une case du tableau, en remplissant les lignes de gauche à droite.
Exemple : vous avez un panelGrid de 3 colonnes et 7 éléments, le tableau résultant aura 2 lignes complètes et la première case de la 3ème ligne.

Donc quand vous organiserez votre grid, si vous insérez un élément, tous les suivants seront décalés.

C'est ce qui arrive lorsque vous mettez un commentaire dans votre panelGrid : il sera comptabilisé dans la liste d'éléments et produira un <tr />, ce qui mettra à mal toute votre table !

En fait, ce sont les tags html qui sont très mal interprétés.
Si vous écrivez une grid comme ça :
<h:panelGrid columns="2" border="1">
  <div>
    <h:outputText value="1" /> 
    <h:outputText value="2" />
  </div>
  <pre> 
  3
  4 
  </pre>
  <a href="#">5</a>
  6
</h:panelGrid>

Vous obtiendrez le tableau suivant :
table.GIF

Observez le comportement du div :
<div>
  <h:outputText value="1" />
  <h:outputText value="2" />
</div>
Le panelGrid vous comptera 3 éléments : le <div> qui produira un <tr /> et les deux outputText chacun dans une case !

Pour grouper des éléments dans une case il faudra les mettres dans un <h:panelGroup>.


Marrant non ?


tags : Java EE, JSF, MicroTip

Publié dans : Java
Ecrire un commentaire - Il y a 0 commentaires
 
Créer un blog gratuit sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus