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 :

Submiter un formulaire


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut Submiter un formulaire
    Bonjour

    Je rencontre un problème pour submiter un formulaire avec JSF. Il y a deux boutons qui peuvent submiter le formulaire. Jusqu'ici aucun problème. Voici le code de mon managed bean.

    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
     
    public class TotoBean {
     
    	private String attribut1;
     
    	private String attribut2;
     
    	public String process1() {
    		System.out.println("");
    		System.out.println("process1");
    		System.out.println("attribut1 = " + this.attribut1);
    		System.out.println("attribut2 = " + this.attribut2);
    		System.out.println("");
    		return null;
    	}
     
    	public String process2() {
    		System.out.println("");
    		System.out.println("process2");
    		System.out.println("attribut1 = " + this.attribut1);
    		System.out.println("attribut2 = " + this.attribut2);
    		System.out.println("");
    		return null;
    	}
    ... getters et setters
    }

    Et ici le code xhtml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <h:form id="form">
    	<h:inputText value="#{totoBean.attribut1}" />
    	<h:commandButton action="#{totoBean.process1}" value=" > " />
    	<br/>
    	<br/>
    	<h:inputText value="#{totoBean.attribut2}" />
    	<h:commandButton action="#{totoBean.process2}" value=" OK " />
    </h:form>
    Lorsque je clique sur le bouton " > ", la méthode process1() est bien exécutée et lorsque je clique sur " OK ", la méthode process2() est bien exécuté. Les traces affichent correctement ce qui a été rentré dans les inputText.

    Mais voici mon problème. Je souhaite n'afficher la deuxième partie de la page (2ème input text et 2ème bouton) que si la première partie a été renseignée. Voici donc mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <h:form id="form">
    	<h:inputText value="#{totoBean.attribut1}" />
    	<h:commandButton action="#{totoBean.process1}" value=" > " />
    	<br/>
    	<br/>
    	<h:inputText rendered="#{totoBean.attribut1 != null}" value="#{totoBean.attribut2}" />
    	<h:commandButton rendered="#{totoBean.attribut1 != null}" action="#{totoBean.process2}" value=" OK " />
    </h:form>
    Ça fonctionne pour la première étape. Lorsque la page s'affiche pour la première fois, seuls le 1er input text et le premier bouton apparaissent. Je renseigne le champ de texte puis je clique sur " > ". Là, le deuxième champs et le deuxième bouton apparaissent. Je renseigne le deuxième champ et c'est là que survient le problème. Quand je clique sur le deuxième bouton (le bouton " OK "), la méthode process2() n'est pas exécutée. La page se recharge en effaçant ce qui a été rentré dans le deuxième champ.

    Que se passe-t-il ?

    Merci d'avance pour votre aide.

  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
    Par défaut
    ton bean est dans un scope request?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut
    oui le bean a un scope request

  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 El Saigneur Voir le message
    oui le bean a un scope request
    Donc normal que tu perds les valeurs du bean entre deux requêtes, le bean est disponible que pour la requete en cours, à la deuxième requete, il est réinitialisé.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut
    Alors comment faire ? Il serait tout de même aberrant de mettre le bean en scope session.

  6. #6
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Tu as plusieurs solutions :

    • Utiliser un scope session.
    • Utiliser un bean session qui ne conserverait que les données que tu souhaites garder tout au long de ton processus (ou du moins sur plusieurs pages), et ainsi conserver ton bean request pour les données à ne faire transiter qu'une seule fois.
    • Utiliser un composant de type <a4j:keepAlive/> qui te permet de conserver tes données plus longtemps qu'avec le scope request, mais sans pour autant qu'il soit de scope session.
    • Utiliser Seam ou JSF 2.0 qui offrent d'autres types de scopes, du genre view...

    Voilà quelques pistes !
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut
    J'utilise RichFaces. Peut-être y-a-t-il moyen de s'en sortir avec de l'Ajax ? J'ai essayé avec <a4j:form ajaxSubmit="true" reRender="idDeMesChampsCachés">. Mais ça ne marche pas.

    D'autre part, j'avoue que je comprends mal le fonctionnement de JSF sur ce coup. Je me replace dans un fonctionnement classique plus bas niveau avec la Servlet et les HTTP parameters. Quand je clique sur mon premier bouton, une HTTP request est envoyée au serveur. JSF traite l'info, voit que mon premier champ n'est pas null et décide donc de "renderer" mon deuxième champ et mon deuxième bouton. J'obtiens donc une seconde page avec mon code HTML complet avec mes deux parties de page. Là je submite. Le submit semble marcher puisque ma page est réaffichée. Il y a donc un aller - retour avec le serveur. Le Servlet doit bien recevoir les HTTP parameters correspondont au form HTML. Elle doit donc bien recevoir les HTTP parameters correspondant à mon deuxième champ de texte et à mon deuxième bouton. Pourquoi ne les traite-t-elle pas. Pourquoi il est compliqué de faire avec un nouveau framework ce qu'il était simple de faire avec les technologies sous-jacentes ?

  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
    Citation Envoyé par El Saigneur Voir le message

    D'autre part, j'avoue que je comprends mal le fonctionnement de JSF sur ce coup. Je me replace dans un fonctionnement classique plus bas niveau avec la Servlet et les HTTP parameters.
    Ce n'est pas lié à JSF, c'est le principe de fonctionnement d'une application web en java.
    Citation Envoyé par El Saigneur Voir le message
    Pourquoi il est compliqué de faire avec un nouveau framework ce qu'il était simple de faire avec les technologies sous-jacentes ?
    tu parles de quelles technologies? Il y'a des restrictions liées au protocole HTTP, d'autres liées à J2EE, d'autres liées à JSF, mais là tu aurais le même problème avec n'importe quelle framework.

    tu peux utiliser keepAlive si tu ne veux pas mettre ton bean en session.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a4j:keepAlive beanName="nomDuBean"/>

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

Discussions similaires

  1. Submit de formulaire et ancre nommée
    Par ssebuser dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/01/2007, 08h54
  2. Redirection vers la même page après submit de formulaire
    Par noOneIsInnocent dans le forum Struts 1
    Réponses: 5
    Dernier message: 27/10/2006, 15h36
  3. Boutons (submit) et formulaires
    Par the_prodigy2 dans le forum Langage
    Réponses: 5
    Dernier message: 17/07/2006, 16h56
  4. [AJAX] submit file Formulaire
    Par Azanael dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 06/06/2006, 19h36
  5. Réponses: 6
    Dernier message: 23/05/2006, 15h12

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