Pour contourner cet aspect je vous propose un exemple de composant que nous allons appeler Conteneur.
Si on regarde oneUI, nous avons souvent cette syntaxe pour les styles:
<div class="specifique"><div class="lotusRightCorner"><div class="lotusInner">Contenu</div></div></div>
Nous allons donc reproduire ce petit composant.
D'abord il faut switcher de perspective pour aller dans la perspective java.
Ensuite il faut ajouter un repertoire de source (propriété du projet), je vous conseille un "link source" pour deux raisons, vous pourrez gerez les versions grace à CVS ou SVN et tout le code mis dans ce repertoire sera commun a toutes vos bases.
Maintenant nous allons creer une nouvelle classe dans ce repertoire (package a votre convenance):
- Code : Tout sélectionner
package net.icao.core.view;
public class BaseConteneur extends UIComponentBase {
@Override
// Je n'ai pas encore saisie toute les subtilités, interets de cette methode,mais elle est obligatoire et doit correspondre a un identifiant unique
public String getFamily() {
return "IcaoBaseComponent";
}
@Override
public void encodeBegin(FacesContext context) throws IOException {
ResponseWriter w = context.getResponseWriter();
w.startElement("div", this);
// Je recupere le style du premier div
Object value = getAttributes().get("style");
// Et je renseigne l'attribut class si besoin
if(value != null)
w.writeAttribute("class",value,"style");
w.startElement("div", this);
// J'ajoute les deux autres div de mise en forme
w.writeAttribute("class","lotusRightCorner",null);
w.startElement("div", this);
w.writeAttribute("class","lotusInner",null);
w.flush();
}
@Override
public void encodeEnd (FacesContext context) throws IOException {
// Nous souhaitant mettre un contenu dans ce composant, il est donc important de dissocier le encodeEnd et Begin, ainsi tous ce qui sera entre notre balise d'ouverture et celle de fermeture sera mis en forme.
ResponseWriter w = context.getResponseWriter();
w.endElement("div");
w.endElement("div");
w.endElement("div");
}
}