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

JSF Java Discussion :

RichFaces : problème de sortBy sur une dataTable


Sujet :

JSF Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 18
    Par défaut RichFaces : problème de sortBy sur une dataTable
    Bonjour,

    J'ai passé plusieurs heures sur un problème de sortBy sur une dataTable. HELP ME!!!!!

    Quand je clique sur le header de la colonne que je veux trier, la flèche change bien, mais le contenu de la table ne change pas, il ne se trie pas.

    Pour info j'utilise:
    RichFaces : 3.3.0.GA
    MyFaces : 1.2.5
    Facelets : 1.1.14

    Voici le code de ma page :
    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
     
    		<rich:panel header="Gestion des utilisateurs">
    			<h:form>
    				<rich:dataTable style="text-align:center;" width="100%"
    					id="userList" rows="1" columnClasses="col"
    					value="#{userBean.users}" var="user">
    					<rich:column>
    						<f:facet name="header">
    							<h:outputText styleClass="headerText" value="Identifiant" />
    						</f:facet>
    						<h:outputText id="id" value="#{user.id}" />
    					</rich:column>
    					<rich:column sortOrder="DESCENDING" sortable="true" sortBy="#{user.firstname}">
    						<f:facet name="header">
    							<h:outputText styleClass="headerText" value="Prénom" />
    						</f:facet>
    						<h:outputText id="firstname" value="#{user.firstname}" />
    					</rich:column>
    					<rich:column sortable="true" sortBy="#{user.lastname}"
    						filterBy="#{user.lastname}" filterEvent="onkeyup">
    						<f:facet name="header">
    							<h:outputText styleClass="headerText" value="Nom" />
    						</f:facet>
    						<h:outputText id="lastname" value="#{user.lastname}" />
    					</rich:column>
    					<rich:column>
    						<f:facet name="header">
    							<h:outputText styleClass="headerText" value="Date de naissance" />
    						</f:facet>
    						<h:outputText id="birthdate" value="#{user.birthdate}">
    							<f:convertDateTime pattern="dd/MM/yyyy" type="date" />
    						</h:outputText>
    					</rich:column>
    					<rich:column>
    						<f:facet name="header">
    							<h:outputText styleClass="headerText" value="Action" />
    						</f:facet>
    						<h:commandLink value="Modifier" action="#{userBean.editUser}" />
    					</rich:column>
    					<f:facet name="footer">
    						<rich:datascroller id="ds"></rich:datascroller>
    					</f:facet>
    				</rich:dataTable>
    			</h:form>
    		</rich:panel>
    Avez-vous une idée de ce qui cloche?
    Est-ce un problème de comptabilité?

    Je bloque!

    Merci d'avance pour vos réponses.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    aurais tu oublier d'implémenter le sort dans ton managed bean ? jsf ne sait pas trier si tu n'as pas implémenter une méthode qui le fasse

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 18
    Par défaut
    Effectivement je n'ai pas implémenté de méthode de tri, je pensais que vous les tris simples c'était natif.

    As-tu un exemple de méthode stp ?

    Merci d'avance, je galère vraiment avec ça!!!

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par sboussekeyt Voir le message
    Effectivement je n'ai pas implémenté de méthode de tri, je pensais que vous les tris simples c'était natif.

    As-tu un exemple de méthode stp ?

    Merci d'avance, je galère vraiment avec ça!!!

    non tu n'a rien à implémenter , on peut voir ton bean?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 18
    Par défaut
    Salut Sniper37,

    Ca me rassure ! Voici mon code:

    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
     
    public class UserBean {
        private Logger logger = Logger.getLogger(this.getClass());
        private User user = new User();
        private List<User> userList;
        private DataModel users;
        private List<UserGroup> userGroups = UserGroupManagerDelegate
                .getAllUserGroups();
     
        public User getUser() {
            user.getGroups();
            return user;
        }
     
        public void setUser(User User) {
            this.user = User;
        }
     
        public List<User> getUserList(){
            if (userList == null){
                userList = UserManagerDelegate.getAllUsers();
            }
            return userList;
        }
     
        public DataModel getUsers() {
            if (users == null) {
                users = new ListDataModel(getUserList());
            }
            return users;
        }
     
        public List<UserGroup> getUserGroups() {
            return userGroups;
        }
     
        public void setUserGroups(List<UserGroup> userGroups) {
            this.userGroups = userGroups;
        }
     
        public String editUser() {
            user = (User) users.getRowData();
            logger.info(user.getId());
            return "userEdit";
        }
     
        public String update() {
            UserManagerDelegate.update(user);
            user = new User();
            return "userList";
        }
     
        public String create() {
            UserManagerDelegate.create(user);
            users.setWrappedData(UserManagerDelegate.getAllUsers());
            user = new User();
            return "userList";
        }
     
        public void listener(UploadEvent event) {
            UploadItem item = event.getUploadItem();
            File file = item.getFile();
            file.getName();
        }
    }
    Merci d'avance pour ton aide.

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    ouii normal, tu utilise dataModel de JSF et pas de Richfaces.
    I faut implémenter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.richfaces.model.Modifiable
    .

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 18
    Par défaut
    tu veux dire que dans mes imports je dois utiliser :

    org.richfaces.model.impl.ListDataModel

    au lieu de :

    javax.faces.model.ListDataModel

    ??

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Non tu dois faire une classe qui implemente Modifiable,
    sinon utilise une liste normale sans passer par DataModel.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 18
    Par défaut
    Salut,

    J'ai essayé de changer dataModel en une List simple, mais ça ne change rien.

    J'ai essayé d'implémenter l'interface Modifiable, mais quand je débug, je ne rentre jamais dans la méthode "modify".

    As-tu une autre idée, ou un exemple stp ?

  10. #10
    Membre éclairé Avatar de Jacobian
    Inscrit en
    Février 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 425
    Par défaut
    fait la chose suivant:
    ajouter le binding de datatable dans le bean ensuite fait un reRender="monDataTable" ca devrais marcher?

  11. #11
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par sboussekeyt Voir le message
    Salut,

    J'ai essayé de changer dataModel en une List simple, mais ça ne change rien.

    J'ai essayé d'implémenter l'interface Modifiable, mais quand je débug, je ne rentre jamais dans la méthode "modify".

    As-tu une autre idée, ou un exemple stp ?
    Montre moi le code de la liste simple utilisé, ça devrait fonctionner..

    Citation Envoyé par Jacobian Voir le message
    fait la chose suivant:
    ajouter le binding de datatable dans le bean ensuite fait un reRender="monDataTable" ca devrais marcher?
    Non Jacobian, il n'ya pas besoin de binding pour réaliser le tri de la table, et le reRender est fait pour réactualiser la valeur d'autres composants après l'événement sort ou filter, la table n'a pas besoin de reRender sur elle meme..

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 18
    Par défaut
    Bonjour et encore merci à tous !

    Sniper37 pour tester la liste simple j'ai utilisé l'attribut userList, comme dans le code suivant:

    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
    public class UserBean {
        private Logger logger = Logger.getLogger(this.getClass());
        private User user = new User();
        private List<User> userList;
        private DataModel users;
        private List<UserGroup> userGroups = UserGroupManagerDelegate
                .getAllUserGroups();
     
        public User getUser() {
            user.getGroups();
            return user;
        }
     
        public void setUser(User User) {
            this.user = User;
        }
        
        public List<User> getUserList(){
            if (userList == null){
                userList = UserManagerDelegate.getAllUsers();
            }
            return userList;
        }
    ...
    Dans ma page web j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <rich:dataTable style="text-align:center;" width="100%"
    					id="userList" rows="1" columnClasses="col"
    					value="#{userBean.userList}" var="user">
    Je précise que "UserManagerDelegate.getAllUsers()" renvoit une ArrayList.

    Dis moi si tu vois un problème, merci encore.

    Simon

  13. #13
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    ouii et l'objet contient quoi comme champs?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 18
    Par défaut
    "UserManagerDelegate.getAllUsers()" renvoit une ArrayList de User.

    User est composé des champs suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        private Long id;
        private Account account;
        private String firstname;
        private String lastname;
        private String phone;
        private String email;
        private Date birthdate;
        private List<UserGroup> groups;
    Tu penses que ça peut venir de là ?

  15. #15
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    non à priori ça ne ne devrais pas poser de problème surtout pour les champs de type String,

    tu as une erreur?

  16. #16
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut
    Regardes cet exemple, peut être que ça t'aideras

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 18
    Par défaut
    Bonjour à tous,

    Snipper, non je n'ai pas d'erreur. Je vois même la requête Ajax qui s'execute avec succès.

    nawrasarum, merci pour le lien, je m'étais basé sur ce même blog pour mettre le tri en place.

    Je pense qu'il y a un problème de compatibilité entre les jars que j'utilise.

    Quelles versions utilisez vous ?

  18. #18
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par sboussekeyt Voir le message
    Bonjour à tous,

    Snipper, non je n'ai pas d'erreur. Je vois même la requête Ajax qui s'execute avec succès.

    nawrasarum, merci pour le lien, je m'étais basé sur ce même blog pour mettre le tri en place.

    Je pense qu'il y a un problème de compatibilité entre les jars que j'utilise.

    Quelles versions utilisez vous ?
    donne plutôt tous ton environnement.. avec ma version 3.3.0.GA il n'a ya pas de problème de tri.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 18
    Par défaut
    Voici ma config :

    RichFaces : 3.3.0.GA
    MyFaces : 1.2.5
    Facelets : 1.1.14
    JBoss : 4.2.3.GA

    Mon web.xml :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
      <display-name>portal</display-name>
      <context-param>
        <param-name>org.richfaces.SKIN</param-name>
        <param-value>ruby</param-value>
      </context-param>
      <context-param>
        <param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name>
        <param-value>true</param-value>
      </context-param>
      <context-param>
        <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
        <param-value>com.sun.facelets.FaceletViewHandler</param-value>
      </context-param>
      <context-param>
        <param-name>facelets.BUILD_BEFORE_RESTORE</param-name>
        <param-value>true</param-value>
      </context-param>
      <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
      </context-param>
      <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
      </context-param>
      <filter>
        <display-name>RichFaces Filter</display-name>
        <filter-name>richfaces</filter-name>
        <filter-class>org.ajax4jsf.Filter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>richfaces</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
      </filter-mapping>
      <listener>
        <listener-class>
    			org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
      </listener>
      <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet>
        <servlet-name>Test</servlet-name>
        <servlet-class>com.jdeal.servlet.Test</servlet-class>
      </servlet>
      <servlet>
        <display-name>Init</display-name>
        <servlet-name>Init</servlet-name>
        <servlet-class>com.jdeal.servlet.Init</servlet-class>
        <init-param>
          <param-name>Log4j</param-name>
          <param-value></param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
      </servlet>
      <servlet>
        <display-name>Erreur404</display-name>
        <servlet-name>Erreur404</servlet-name>
        <servlet-class>com.jdeal.servlet.Erreur404</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>Test</servlet-name>
        <url-pattern>/Test</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>Init</servlet-name>
        <url-pattern>/Init</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>Erreur404</servlet-name>
        <url-pattern>/Erreur404</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.xhtml</welcome-file>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      <error-page>
        <error-code>404</error-code>
        <location>/Erreur404</location>
      </error-page>
      <login-config>
        <auth-method>BASIC</auth-method>
      </login-config>
    </web-app>

  20. #20
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Pas de raison pour que ça ne marche pas.
    Fait une uen liste avec un bean simple, juste des champs de type String. Enlève les objets Account .. .et refait le test..

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/08/2008, 08h57
  2. Réponses: 4
    Dernier message: 16/06/2005, 15h37
  3. Problème de select sur une date (DATETIME....)
    Par zeldoi5 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/05/2005, 11h19
  4. probléme de cadre sur une image qui me sert de lien
    Par thomas_chamas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/11/2004, 17h36
  5. Problème de chaine sur une page HTML
    Par Kerod dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/11/2004, 16h23

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