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 :

Applet et cycle de vie JSF


Sujet :

JSF Java

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 39
    Par défaut Applet et cycle de vie JSF
    Bonjour,

    Dans mon application JSF je possède une applet invisible qui permet de créer les backing bean. Par exemple, cette applet créer un objet user qui sert à afficher les données de l'utilisateur dans une table RichFaces. L'objet est envoyé par requête http à la servlet réceptrice.
    Le problème est que l'applet se charge de façon asynchrone par rapport au HTML, du coup quand la table RF veut afficher les données, celles-ci n'ont pas encore été envoyé par l'applet qui n'est pas chargée complètement. J'obtiens alors une erreur 500.
    org.apache.jasper.JasperException: javax.servlet.ServletException: /xhtml/welcome.xhtml @25,109 value="#{user.keysList}": Error reading 'keysList' on type com.***.***.user.User
    Voici mon xhtml épuré:
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html lang="fr" 
    	xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:a4j="http://richfaces.org/a4j"
    	xmlns:rich="http://richfaces.org/rich">
    <head>
      <title>***</title>
    </head>
    <body>	
    	<applet width="0" height="0" archive="com/***/***/applet/appletClasses.jar" code="com.***.***.applet.DataApplet" codebase="http://localhost:8090/PID_CKR/resources/applet" id="applet"></applet>
    	
    	<ui:debug hotkey="M" />
    	
      	<f:view>
      		<rich:panel header="Status" style="width:302px; margin-bottom:20px">
      			<h:graphicImage value="./resources/img/bigCheck.png" style="margin-right:50px"/>
      			<h:outputText value="** is connected" style="font-weight:bold; font-size:14px;margin-left:50px "/>
      		</rich:panel>
      		<rich:tabPanel switchType="ajax" style="margin-top:20px">
      			<rich:tab label="Check user certificate">
      				<rich:dataTable value="#{user.keysList}" var="key" style="float:left; width:250px;margin-right:230px">
      					<f:facet name="header">
      						<h:outputText value="User data"/>
    					</f:facet>
    					<rich:column style="width:82px">
    						<f:facet name="header">Title</f:facet>
    						<h:outputText value="#{key}"/>
    					</rich:column>
    					<rich:column>
    						<f:facet name="header">Data</f:facet>
    						<h:outputText value="#{user.userDataList[key]}"/>				
    					</rich:column>
      				</rich:dataTable>
      				
      			</rich:tab>
      			<rich:tab label="Check user keys certificates">
      			</rich:tab>
      		</rich:tabPanel>	 
      	</f:view>
    </body>
    </html>
    Au moment où le navigateur affiche la page la keylist vaut nul car l'applet n'a pas encore envoyé les données.

    Avez-vous une idée pour faire en sorte que l'applet se charge avant le html?

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 766
    Par défaut
    Bonjour,

    C'est tout simplement pas du tout fait pour travailler ensemble. Faire du client riche et du client lourd et synchroniser les deux, c'est un peu comment dire : mal ?

    Solution s'il y a, ça sera du bricolage en javascript.

    Bon courage,

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 39
    Par défaut
    Merci Jimmy.
    Je redoutais ce genre de réponse.

    Je vais chercher du côté de JS alors et je posterai la solution (si j'en trouve une).

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 39
    Par défaut
    Finalement j'ai trouvé une autre solution : actualiser la table RichFaces (cf. http://www.developpez.net/forums/d11...requetes-poll/).
    J'ai quelque peu modifié le code pour que la liste ne vaut pas nulle mais contienne des chaînes statique ("No data"). Ainsi la liste peut se remplir même si l'applet n'est pas encore lancée.

    Une autre solution, qui n'en est pas une : dans le xhtml, écrire une fonction js avec une variable en entrée contenant une boucle while qui boucle tant que la valeur de la variable n'est pas la bonne. Cette fonction est ensuite placée dans l'attribut onload du tag body. Cette variable est envoyée par l'applet à la fin de son traitement ce qui fait que la page ne s'affiche que lorsque la variable est envoyée c'est-à-dire lorsque l'applet à fini son traitement.
    Ce n'est pas une solution car l'applet est résolu à la fin du cycle de vie de JSF (render response) donc retarder l'affichage de la page ne changera rien du côté serveur (et donc la liste ne sera pas à jour côté serveur).

    PS : arrêtez moi si je dis des bêtises.

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

Discussions similaires

  1. Annotations cycle de vie JSF
    Par jadey dans le forum JSF
    Réponses: 1
    Dernier message: 23/06/2014, 12h43
  2. Cycle de vie JSF : un peu flou
    Par fou-jea dans le forum JSF
    Réponses: 1
    Dernier message: 19/09/2012, 14h28
  3. Phase RENDER_RESPONSE du cycle de vie JSF
    Par riadhhwajdii dans le forum JSF
    Réponses: 0
    Dernier message: 06/04/2012, 11h46
  4. Cycle de vie JSF et Hibernate Validator
    Par FunkyBreizh dans le forum JSF
    Réponses: 2
    Dernier message: 16/07/2009, 14h42
  5. Réponses: 4
    Dernier message: 31/05/2007, 10h48

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