IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 2 Java Discussion :

Exemples utilisations tabletags


Sujet :

Struts 2 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 54
    Par défaut Exemples utilisations tabletags
    Bonjour à tous.

    Bien le titre parle de lui-même !!
    Je suis sur un projet Struts 2 et certaines IHM affichant des listes doivent être triées, du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <th width="40%">
    <tt:sortableHeader title="Nom" action="user_list_view" name="user" sortKey="user" sortOrder="ascending" sortable="true" />
    </th>
    Par contre je ne sais absolument pas comment celà se passe au niveau de l'action !
    Je sais simplement que la classe d'action doit implémenter l'interface Sortable mais basta.
    En fait je cherche comme un dingue un semblant de tuto sur l'utilisation de ce projet sur le net mais sans succès.
    C'est pourquoi si vous l'avez déjà utilisé ce serait cool d'éclairer ma lanterne.

    D'avance merci !

  2. #2
    Membre expérimenté Avatar de petitpasdelune
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 221
    Par défaut
    L'interface Sortable ne fait que définir 2 constantes.

    Il y a un exemple dans le dépot SVN de tabletags. Il montre le fonctionnement (basique) des tabletags.

    Il faut implémenter sois-même la pagination des résultats.

    Pour ma part je ne suis pas arrivé à faire fonctionné le tri. AMHA TableTags n'est pas suffisamment mature.

    Je suis revenu à ExtremeComponent qui même si il n'est plus en développement, reste très simple et souple (pagination, filtre & tri automatique, export des tables vers PDF et Excel) et configurable à souhait.

    Même avec de grosses listes il reste rapide

    Copie (modifiée) de l'action dans le dépôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
     
    import com.googlecode.tabletags.tagsupport.PagerDisplay;
    import com.googlecode.tabletags.tagsupport.Sortable;
    import com.opensymphony.xwork2.ActionSupport;
     
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
     
    import org.apache.struts2.interceptor.SessionAware;
     
    /**
     * A test action that tests the rendering of the table tag.
     */
    public class TableAction extends ActionSupport implements SessionAware,
        Sortable {
        // key in the session where the current page number is stored
        public static final String PAGE_NUMBER = "PAGE_NUMBER";
     
        public static final String COLUMN_KEY = "COLUMN_KEY";
     
        public static final String SORT_ORDER = "SORT_ORDER";
     
        private List items;
     
        private Map session;
     
        private String pagerCommand;
     
        private PagerDisplay pagerDisplay;
     
        private String sortColumnKey;
     
        /**
         * @see com.opensymphony.xwork2.ActionSupport#execute()
         */
        public String execute() {
            // Récup des données (Hibernate, etc...)
            ItemDAO iDao = new ItemDAO();
            List temp = iDao.findAll();
     
            //tu peux aussi récupérer via les valeurs du PagerDisplay via les paramètres pour le rendre configurable.
            pagerDisplay = new PagerDisplay(15,1,items.size());
     
            int currentPage = getPageNumber();
     
     
            if(pagerCommand != null) {
                if("next".equals(pagerCommand) && currentPage < pagerDisplay.getTotalPages()) {
                    currentPage += 1;
                } else if("previous".equals(pagerCommand) && currentPage > 1) {
                    currentPage -= 1;
                }
                session.put(PAGE_NUMBER, new Integer(currentPage));
            }
     
            int start = pagerDisplay.pageSize * (currentPage-1);
            int stop = pagerDisplay.pageSize * currentPage
     
            if(start<0) start = 0;
            if(stop>temp.size()) stop = temp.size();
     
            item = temp.subList(start,stop);
     
     
            if(sortColumnKey != null) {
                if(sortColumnKey.equals(getSortColumnKey())) {
                    if(DESCENDING.equals(getSortOrder())) {
                        session.put(SORT_ORDER, ASCENDING);
                    } else {
                        session.put(SORT_ORDER, DESCENDING);
                    }
                } else {
                    session.put(COLUMN_KEY, sortColumnKey);
                    session.put(SORT_ORDER, DESCENDING);
                }
            }
            return SUCCESS;
        }
     
        protected int getPageNumber() {
            Integer pageNum = (Integer) session.get(PAGE_NUMBER);
            if(pageNum == null) {
                pageNum = new Integer(1);
                session.put(PAGE_NUMBER, pageNum);
            }
            return pageNum.intValue();
        }
     
        public List getItems() {
            return items;
        }
     
        public void setItems(List items) {
            this.items = items;
        }
     
        public void setSession(Map session) {
            this.session = session;
        }
     
        public String getPagerCommand() {
            return pagerCommand;
        }
     
        public PagerDisplay getPagerDisplay() {
            return pagerDisplay;
        }
     
        public void setPagerCommand(String pagerCommand) {
            this.pagerCommand = pagerCommand;
        }
     
        public void setPagerDisplay(PagerDisplay pagerDisplay) {
            this.pagerDisplay = pagerDisplay;
        }
     
        public String getSortColumnKey() {
            String sortColumnKey = (String) session.get(COLUMN_KEY);
            if(sortColumnKey == null) {
                //Doit correspondre à la clé de la colonne par défaut 
                return "col1";
            }
            return sortColumnKey;
        }
     
        public String getSortOrder() {
            String sortOrder = (String) session.get(SORT_ORDER);
            if(sortOrder == null) {
                return DESCENDING;
            }
            return sortOrder;
        }
     
        public void setSortColumnKey(String sortColumnKey) {
            this.sortColumnKey = sortColumnKey;
        }
    }
    En plus si tu veux pouvoir configurer par un form ton pager, tu vas devoir modifier les templates velocity

    Tout cela pour arriver à ce que fait déjà très bien ExtremeComponents; exemple :
    Action (BaseAction implemente SessionAware et ParameterAware
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public class AddressAction extends BaseAction  {
            private List items;
            private Item item;
     
    	public String execute() throws Exception {
    		ItemDAO iDao = new ItemDAO();
    		item = 	iDao.findById(getParameter("id"));	
    		return SUCCESS;
    	}
    	public String list() throws Exception {
    		ItemDAO iDao = new ItemDAO();
    		items = iDao.findAll();
    		return SUCCESS;
    	}
             //Getters 1 Setters
     
    }
    Dans la jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <s:text id="ti" name="entity.item"/>
    <s:text id="p1" name="entity.prop1"/>
    <s:text id="p2" name="entity.prop2"/>
    <s:text id="p3" name="entity.prop3"/>
    <s:url id="img" value="/img/small/next.png" />
    <s:url id="ecaddraction" action="items"/> <!-- J'ai defini dans struts.xml l'action items la comme méthode list -->
    <ec:table title="${ti}" var="addr" items="addresses" imagePath="/ent/img/table/*.gif"  action="${ecaddraction}" >
    <ec:exportXls fileName="addresses.xls" tooltip="Export Excel" text="XLS"/>
    <ec:exportPdf fileName="addresses.pdf" tooltip="Export PDF" text="PDF"/>
    <ec:row>
    	<ec:column property="itemId" title=" " style="width:20px;" filterable="false" sortable="false">
    		<s:url id="act" action="item">
    			<s:param name="id" value="${item.itemId}"/>
    		</s:url>
    		<s:a href="${act}"><img src="${img}"/></s:a>
    	</ec:column>
    	<ec:column property="prop1" title="${p1}"></ec:column>
    	<ec:column property="prop2" title="${p2}"></ec:column>
    	<ec:column property="prop3" title="${p3}"></ec:column>
    </ec:row>
    </ec:table>
    Si cela peut t'aider.

    PPDL.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 54
    Par défaut
    Oui merci beaucoup pour ta réponse

    Effectivement je suis tombé sur le dépot SVN de tabletags mais j'ai trouvé leur exemple peu convaincant (pour ne pas dire pourri).

    Je ne connaissais pas Extreme Component, si tu me dis que le tri et la pagination sont faciles à mettre en place, je ne demande pas mieux !

    Je m'en vais tester !

    Merci encore et @+ !

  4. #4
    Membre expérimenté Avatar de petitpasdelune
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 221
    Par défaut
    Je vais aussi essayer displaytags avec struts2 pour voir

    PPDL.

Discussions similaires

  1. Exemple utilisation CursorLoader
    Par Benmaster1 dans le forum Android
    Réponses: 1
    Dernier message: 30/04/2014, 18h57
  2. Exemple utilisant TWAIN
    Par morinxav1 dans le forum Débuter
    Réponses: 2
    Dernier message: 08/10/2012, 20h43
  3. exemple utilisation maven
    Par Mr_informatique dans le forum Maven
    Réponses: 0
    Dernier message: 11/04/2010, 14h03
  4. Exemple utilisation de tube ( pipe)
    Par amnay dans le forum Linux
    Réponses: 5
    Dernier message: 03/04/2010, 11h44
  5. Recherche des exemple d'utilisation
    Par lemme dans le forum Merise
    Réponses: 2
    Dernier message: 26/02/2003, 13h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo