[JAVA] Creer un composant spécifique

Toutes les astuces concernant les XPages

[JAVA] Creer un composant spécifique

Messagepar amahi » 28 Juin 2010 à 14:49

Très vite, malgré la richesse fonctionnelle des xpages, si on souhaite poussez un peu l'industrialisation de ses applications nous sommes confrontés aux limitations du designer.
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");
   }




}
Dernière édition par amahi le 30 Juin 2010 à 08:58, édité 1 fois.
amahi
Empereur des posts
Empereur des posts
 
Message(s) : 1032
Inscrit(e) le : 08 Jan 2007 à 16:57
Localisation : Region parisienne

Inscire le composant

Messagepar amahi » 28 Juin 2010 à 14:59

Maintenant que vous avez le code vous souhaitez pouvoir vous en servir.
Vous devez pour cela creer un fichier de configuration. Le meilleur moyen d'avoir une idée de ce que c'est que ce fichier, c'est de creer un customcomponent dans domino, de switcher dans la perspective java. Vous verez que pour chacun de vos component vous avez un fichier xsp-config.

Dans notre cas il faut creer ce fichier dans le repertoire webcontent\WEB-INF.

cela donne


Code : Tout sélectionner
<faces-config>
<faces-config-extension>
    <namespace-uri>http://nawak/cequetuveu</namespace-uri>
     <default-prefix>leprefixdetesreves</default-prefix>
</faces-config-extension>

<component>
      <description>l'equivalent de l'aide</description>
      <display-name>Conteneur de base</display-name>
      <component-type>ce que vous avez mis dans le getFamily du java</component-type>
      <component-class>net.icao.core.view.BaseConteneur</component-class>
      <component-extension>
          <tag-name>monconteneur</tag-name>
      </component-extension>
</component>


<property>
<property-name>style</property-name>
<property-class>string</preoperty-class>
</property>
</faces-config>
amahi
Empereur des posts
Empereur des posts
 
Message(s) : 1032
Inscrit(e) le : 08 Jan 2007 à 16:57
Localisation : Region parisienne

Utiliser le composant

Messagepar amahi » 28 Juin 2010 à 15:07

Maintenant vous pouvez utilisez le composant.

Dans la perspective Domino, vous avez dans la partie "Controls" , "Other",
en cliquant dessus cela vous ouvre un dialogue box, votre composant apparait dans la rubrique "Other Controls".
En l'ajoutant dans votre Xpage/composant, vous obtiendrez le source suivant:

Code : Tout sélectionner
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
              xmlns:leprefixdetesreves = "http://nawak/cequetuveu">

<leprefixdetesreves:monconteneur style="lotusPlaceBar">
    Mon contenu qui sera mis en forme dans la place bar !
</leprefixdetesreves:monconteneur>
</view>


Niveau HTML je retrouverez ceci:

Code : Tout sélectionner
<div class="lotusPlaceBar"><div class="lotusRightCorner"><div
div class="lotusInner">
Mon contenu qui sera mis en forme dans la place bar !
</div></div>
amahi
Empereur des posts
Empereur des posts
 
Message(s) : 1032
Inscrit(e) le : 08 Jan 2007 à 16:57
Localisation : Region parisienne

Messagepar amahi » 23 Août 2010 à 09:04

http://www-10.lotus.com/ldd/ddwiki.nsf/ ... for_XPages

Apparament en 8.5.2 ca va etre monnaie courante
@Novaliance
amahi
Empereur des posts
Empereur des posts
 
Message(s) : 1032
Inscrit(e) le : 08 Jan 2007 à 16:57
Localisation : Region parisienne


Retour vers XPages