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 :

Problème, remplissage d'une Datatable en passant par un objet


Sujet :

JSF Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 110
    Points : 67
    Points
    67
    Par défaut Problème, remplissage d'une Datatable en passant par un objet
    Bonjour,

    j'ai (encore) un problème:

    Je veux remplir un tableau dynamiquement, donc dans mon Bean j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class UserTimeManager {
     
    	private List<Users> users;
    ...
    }
    Dans ce cette classe Users, j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Users implements java.io.Serializable {
     
    	private String login;
    	private UsersDatas usersDatas;
     
    ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class UsersDatas implements java.io.Serializable {
     
    	private Integer remainTime;
    ...
    }
    Et donc voici mon code JSF:

    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
     
    <rich:dataTable onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
    onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
    cellpadding="0" cellspacing="0" width="400" border="0" var="user"
    value="#{userTimeManager.users}">
     
    <rich:column>
    	<f:facet name="header">
    		<h:outputText styleClass="headerText" value="Login" />
    	</f:facet>
    		<h:outputText styleClass="headerText" value="#{user.login}" />
    </rich:column>
    <rich:column>
    	<f:facet name="header">
    		<h:outputText styleClass="headerText" value="Time" />
    	</f:facet>
    		<h:outputText styleClass="headerText" value="#{user.usersDatas.remainTime}" />
    </rich:column>
    </rich:dataTable>
    Et enfin l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.el.ELException: /pages/administration.xhtml @97,85 value="#{user.usersDatas.remainTime}": Error reading 'remainTime' on type integration.database.UsersDatas_$$_javassist_0
    L'affichage des login fonctionnent, mais quand je veux ajouter la variable remainTime en passant par UsersDatas, la ça plante.

    Une idée?

    Merci.

  2. #2
    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
    Points : 5 059
    Points
    5 059
    Par défaut
    ajoute le bean UsersDatas en property du bean Users dans le faces-config.

    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
     
    <managed-bean>
      <managed-bean-name>users</managed-bean-name>
      <managed-bean-class>xx.yy.Users</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
      <managed-property>
       <property-name>usersDatas </property-name>
       <property-class>xx.UsersDatas </property-class>
       <value>#{usersDatas }</value>
      </managed-property>
     
    </managed-bean>
     
    <managed-bean>
      <managed-bean-name>usersDatas </managed-bean-name>
      <managed-bean-class>xx.UsersDatas</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 110
    Points : 67
    Points
    67
    Par défaut
    Bon, ça ne génère plus d'erreur mais mon tableau est vide maintenant.

    Voici mon face-config.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
     
     <managed-bean>
     <managed-bean-name>userTimeManager</managed-bean-name>
      <managed-bean-class>business.services.UserTimeManager</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
      <managed-property>
       <property-name>usersDao</property-name>
       <property-class>integration.dao.UsersDao</property-class>
       <null-value/>
      </managed-property>
      <managed-property>
       <property-name>users</property-name>
       <property-class>java.util.List</property-class>
       <value>#{usersDao.getAllUsers}</value>
      </managed-property>
     </managed-bean>
    <managed-bean>
      <managed-bean-name>users</managed-bean-name>
      <managed-bean-class>integration.database.Users</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
      <managed-property>
       <property-name>usersDatas</property-name>
       <property-class>integration.database.UsersDatas</property-class>
       <value>#{usersDatas}</value>
      </managed-property>
     </managed-bean>
     <managed-bean>
      <managed-bean-name>usersDatas</managed-bean-name>
      <managed-bean-class>integration.database.UsersDatas</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
     </managed-bean>

  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
    Points : 5 059
    Points
    5 059
    Par défaut
    tu n'a pas besoin de ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <managed-property>
       <property-name>users</property-name>
       <property-class>java.util.List</property-class>
       <value>#{usersDao.getAllUsers}</value>
      </managed-property>

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 110
    Points : 67
    Points
    67
    Par défaut
    En l'enlevant je retrouve mon erreur, a mon avis je n'ai pas du comprendre un truc dans l'initialisation des beans.

    Voici mon UserTimeManager qui est un manageBean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class UserTimeManager {
     
    	private UsersDao usersDao;	
    	private List<Users> users;
     
    	public UserTimeManager() {
    		usersDao = new UsersDaoImpl();
    		users = usersDao.getAllUsers();
    	}
    ...
    }
    Et mon face-config:

    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
     
    <managed-bean>
      <managed-bean-name>userTimeManager</managed-bean-name>
      <managed-bean-class>business.services.UserTimeManager</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
     </managed-bean>
     
    <managed-bean>
      <managed-bean-name>usersDatas</managed-bean-name>
      <managed-bean-class>integration.database.UsersDatas</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
     </managed-bean>
     
     <managed-bean>
      <managed-bean-name>users</managed-bean-name>
      <managed-bean-class>integration.database.Users</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
      <managed-property>
       <property-name>usersDatas</property-name>
       <property-class>integration.database.UsersDatas</property-class>
       <value>#{usersDatas}</value>
      </managed-property>
     </managed-bean>

  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
    Points : 5 059
    Points
    5 059
    Par défaut
    tu peux donner la trace complète de l'exception

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 110
    Points : 67
    Points
    67
    Par défaut
    Voila:

    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
     
    javax.faces.FacesException: javax.el.ELException: /pages/administration.xhtml @97,85 value="#{user.usersDatas.remainTime}": Error reading 'remainTime' on type integration.database.UsersDatas_$$_javassist_0
    	at javax.faces.component.UIOutput.getValue(UIOutput.java:187)
    	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:201)
    	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:284)
    	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:154)
    	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:849)
    	at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:286)
    	at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
    	at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:284)
    	at org.richfaces.renderkit.AbstractRowsRenderer.encodeCellChildren(AbstractRowsRenderer.java:285)
    	at org.richfaces.renderkit.AbstractTableRenderer.encodeOneRow(AbstractTableRenderer.java:371)
    	at org.richfaces.renderkit.AbstractRowsRenderer.process(AbstractRowsRenderer.java:86)
    	at org.ajax4jsf.model.SequenceDataModel.walk(SequenceDataModel.java:101)
    	at org.ajax4jsf.component.UIDataAdaptor.walk(UIDataAdaptor.java:1151)
    	at org.richfaces.renderkit.AbstractRowsRenderer.encodeRows(AbstractRowsRenderer.java:106)
    	at org.richfaces.renderkit.AbstractRowsRenderer.encodeRows(AbstractRowsRenderer.java:91)
    	at org.richfaces.renderkit.AbstractTableRenderer.encodeTBody(AbstractTableRenderer.java:76)
    	at org.richfaces.renderkit.AbstractTableRenderer.encodeChildren(AbstractTableRenderer.java:83)
    	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:825)
    	at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:282)
    	at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
    	at org.richfaces.renderkit.TabRendererBase.encodeChildren(TabRendererBase.java:113)
    	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:825)
    	at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:282)
    	at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
    	at org.richfaces.renderkit.html.TabPanelRenderer.doEncodeChildren(TabPanelRenderer.java:285)
    	at org.richfaces.renderkit.html.TabPanelRenderer.doEncodeChildren(TabPanelRenderer.java:280)
    	at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:121)
    	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:825)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:936)
    	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:942)
    	at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:578)
    	at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
    	at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
    	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
    	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:532)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
    	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Unknown Source)
    Caused by: javax.el.ELException: /pages/administration.xhtml @97,85 value="#{user.usersDatas.remainTime}": Error reading 'remainTime' on type integration.database.UsersDatas_$$_javassist_0
    	at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:76)
    	at javax.faces.component.UIOutput.getValue(UIOutput.java:184)
    	... 57 more
    Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    	at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:86)
    	at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:140)
    	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
    	at integration.database.UsersDatas_$$_javassist_0.getRemainTime(UsersDatas_$$_javassist_0.java)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
    	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
    	at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:73)
    	at org.apache.el.parser.AstValue.getValue(AstValue.java:118)
    	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    	at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
    	... 58 more

  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
    Points : 5 059
    Points
    5 059
    Par défaut
    le problème vient du fait la liste est null, getUsersDatas génère une exception, tu perd la session hibernate coté client, hibernate ne peux pas récupérer la liste, ce n'est pas un problème JSF.
    dans ta requete hibernate ajoute la jointure ou ajoute le lazy loading..


    Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 110
    Points : 67
    Points
    67
    Par défaut
    Ok, ce qui est bizarre c'est que si je fais un dataTable avec juste l'affichage des login, ça fonctionne, et la liste n'est pas null (puisque ça fonctionne). Comment expliquer cela?

    En passant, y aurait t'il un tuto qui pourrait m'expliquer comment faire une "belle" architecture d'un projet JSF, ici j'utilise directement mes classes de la couche DAO dans mes beans, je me demande si je mélange pas tout. J'ai déjà chercher sur google et je n'ai pas trouvé mon bonheur.

    [EDIT]
    J'ai résolu le problème en supprimant la cloture de ma session dans la méthode getAllUsers(). Je ne suis pas sur que ce sois la bonne chose a faire mais faute de mieu...
    [/EDIT]

  10. #10
    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
    Points : 5 059
    Points
    5 059
    Par défaut
    Citation Envoyé par FunkyBreizh Voir le message
    Ok, ce qui est bizarre c'est que si je fais un dataTable avec juste l'affichage des login, ça fonctionne, et la liste n'est pas null (puisque ça fonctionne). Comment expliquer cela?
    c'est logique, si tu regarde bien l'exception ce n'est pas la première liste; mais la liste d'objets persistents usersDatas , ta liste des users dont bien récupérés mais la liaison usrersDatas n'est pas faites.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 110
    Points : 67
    Points
    67
    Par défaut
    C'est bon, le problème concernait bien Hibernate, merci beaucoup pour ton aide sniper, du coup j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	@ManyToOne(fetch = FetchType.EAGER)
    	public UsersDatas getUsersDatas() {
    		return this.usersDatas;
    	}
    Alors que avant l'annotation était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	@ManyToOne(fetch = FetchType.LAZY)
    Ca fonctionne nickel. J'ai plus ou moins compris pourquoi, je vais essayer de me renseigner un peu plus sur le lazy loading.

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/11/2011, 14h34
  2. [AC-2007] Problème requête sur 1 table en passant par une association
    Par ganon dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 30/08/2009, 15h33
  3. Connexion à une DB en passant par un serveur
    Par Dasson dans le forum JDBC
    Réponses: 2
    Dernier message: 14/05/2008, 09h10
  4. Réponses: 7
    Dernier message: 26/03/2008, 17h20
  5. Problème pour lire une datatable
    Par kikitx dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/08/2007, 20h19

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