En XSP pour afficher la liste des joueurs de foot il faut faire ce qui suit :

<esql:connection>

 <esql:pool>foot</esql:pool>
 <esql:execute-query>
   <esql:query>SELECT * FROM m_player </esql:query>
    <esql:results>
       <esql:row-results>
          <player>
              <id_player><esql:get-int column="id_player"/></id_player>
              <player_name><esql:get-string column="player_name"/></player_name>
              <player_birth><xsp:expr><esql:get-string column="player_birth"/></xsp:expr></player_birth>
              <player_town><esql:get-string column="player_town"/></player_town>
              <player_size><esql:get-string column="player_size"/></player_size>
              <player_weight><esql:get-string column="player_weight"/></player_weight>
              <player_start><esql:get-string column="player_start"/></player_start>
              <player_photo><esql:get-string column="player_photo"/></player_photo>
              <player_position><esql:get-string column="player_position"/></player_position>
              <id_club><esql:get-string column="id_club"/></id_club>
           </player>
           </esql:row-results>
       </esql:results>
    </esql:execute-query>

</esql:connection>

avec GROOVY on arrive à cela :

import groovy.sql.Sql

import groovy.xml.SAXBuilder

sql = Sql.newInstance('jdbc:postgresql://localhost:5432/foot, "footlogin","footpass","org.postgresql.Driver")

contentHandler = bsf.lookupBean("contentHandler")

xml = new SAXBuilder(contentHandler)

contentHandler.startDocument()

xml.root() {

   sql.eachRow('select * from m_player') { joueur |
   xml.player() {
         id_player(joueur.id_player);
         player_name(joueur.player_name);
         player_url_name(joueur.player_url_name);
         player_birth(joueur.player_birth);
         player_town(joueur.player_town);
         player_size(joueur.player_size);
         player_weight(joueur.player_weight);
         player_start(joueur.player_start);
         player_photo(joueur.player_photo);
         player_position(joueur.player_position);
         id_club(joueur.id_club);
     }
   }

}

sql.close()

contentHandler.endDocument()

Conclusion

le resultat est le meme mais :

  1. XSP est de moins en moins utilisé (meme sil l'est encore beaucoup ; la tendance n'est plus l'xsp car trop vieux et moins souple )
  2. taper les <gnagna>text</gnagna> c'est d'une part pénible et d'autre part prete à erreur si on tape un "noeud" de travers alors qu'avec groovy gnagna("text") ne risque pas de poser de pb sur le format meme du "noeud".
  3. gain de temps pour ne plus ecrire _que_ la partie commancant par xml.root !!!
  4. Groovy, qui ne depend nullement de Cocoon (alors que XSP ...), à le vent en poupe et est utilisé par des miliers de developpeurs Java .