Struts2 et DisplayTag depuis une java.util.Map

Encore un petit truc et astuce Struts2 :)

Voici comment construire une série de tableau encadré par des fieldset dans une JSP depuis un objet de type java.util.Map.
La clé de la map sera le titre du cadre du fieldset et la valeur de map sera une liste d’objet. On utilisera la librairie Displaytag pour le rendu graphique des tableaux.

Code de la classe action

Tout d’abord, on implémente l’interface Preparable et dans la methode prepare(), on construit la Map<String, List<MonObjet>>.

 private Map<String, List<MonObjet>> maMap;
 ...
 public class MaClassAction extends ActionSupport implements Preparable {
    public void prepare() throws Exception {
       ...
       List<MonObjet> listeObjet= new ArrayList<MonObjet>();
       String titre;
       ...
       maMap.put(titre, listeObjet);
    }
    ...
    //getter/setter
    ...
 }

La clé sera un String et la valeur associé, une liste d’objet. Jusque là, rien de compliqué.

Code de la JSP

Le plus compliqué est dans la page JSP. Tout d’abord on crée une boucle sur le keySet() de la map. Celle-ci contient la clé de la map, dans notre cas le titre du cadre du fieldset.
Ensuite on crée 2 set. Le premier contiendra la valeur de la clé de la map et le second sera la liste d’objet associé à celle-ci. Faites attention à la syntaxe OGNL ;-)
Pour terminer, on crée le tableau à l’aide du tag display. On utilisera le pageScope pour référencer la liste d’objet sur laquelle on est en train de boucler

 <s:iterator id="monIterator" value="maMap.keySet()">
   <fieldset style="margin: 10px; padding: 5px">
      <s:set name="cleDeLaMap" value="monIterator"/>
      <legend>
         <strong><small><s:property value="monIterator"/></small></strong>
      </legend>
      <s:set name="maListeDObjet" value="maMap[#cleDeLaMap]"/>
      <display:table id="monTableau" name="pageScope.maListeDObjet" class="grid" style="width:100%;">
         <display:setProperty name="basic.msg.empty_list" value="Auncune donnée."/>
         <display:column property="macolonne1" title="Titre Colonne1"/>
         <display:column property="macolonne2" title="Titre Colonne2"/>
       </display:table>
    </fieldset>
 </s:iterator>

Enjoy \o/

 

Vus : 2031
Publié par Costalfy : 10