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 rerender selectbooleancheckbox


Sujet :

JSF Java

  1. #1
    Membre confirmé Avatar de trin86
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 171
    Par défaut problème rerender selectbooleancheckbox
    Salut,

    Voilà j'ai mis un checkbox à chaque noeud d'un richfaces tree, j'ai aussi rajouté un valuechange listener pour récupérer la case cochée ou décochée.

    J'arrive à récupérer la valeur exacte quand je coche mais lors du rerender de la page ça m'affiche l'ancienne valeur.

    De plus lors du chargement de la page les cases sont toujours décochées quelquesoit le value :

    Voici mon code 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
    23
    24
    25
    26
    27
    28
    29
    30
     
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <f:view>
    <a4j:form id="formulaire">
    					<h:graphicImage value="../Images/RondBleu.gif" style="border:0;" />
    			 		<h:outputText value="#{EBEssai.arbre.data}" />
    					<rich:tree id="arbre"  adviseNodeOpened="true" switchType="client" value="#{EBEssai.arbre}"	var="node" >
    					<rich:treeNode ajaxSingle="false" >
    						<h:selectBooleanCheckbox id="noeud" value="true" valueChangeListener="#{EBEssai.handleValueChanged}" immediate="true" >
    						<a4j:support event="onclick" reRender="formulaire"/>
    						</h:selectBooleanCheckbox>
    						<h:outputText value="#{node}" />
    					</rich:treeNode>
           				</rich:tree>
      </a4j:form>
    </f:view>
    </body>
    </html>
    voici mon handler du checkbox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void handleValueChanged(ValueChangeEvent event) {
    		System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ new value "+event.getNewValue()+" id "+event.getComponent().getId());
    		HtmlSelectBooleanCheckbox caseàcocher =(HtmlSelectBooleanCheckbox) event.getComponent();
    		caseàcocher.setSelected(Boolean.valueOf(event.getNewValue().toString()));
    		FacesContext.getCurrentInstance().renderResponse(); 
    	}
    ça me gene beaucoup que l'affichage ne suit pas les changement des cases
    merci de m'aider

  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
    enleve immediate = true, et avec a4j:support tu n'a pas besoin d'utiliser valuechangelistener.

  3. #3
    Membre confirmé Avatar de trin86
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 171
    Par défaut
    resalut,

    1) j'ai enlevé immidiate=true ça ne change rien lors du rerender
    2) j'ai besoin d'un value change event pour récupérer l'ancienne et la nouvelle valeur du checkbox, donc je ne peux enlever le valuechangelistener. A ce propos quand j'affiche la old value j'obtient toujours null quelque soit les "cochage" que je fais.

    Merci

  4. #4
    Membre confirmé Avatar de trin86
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 171
    Par défaut
    Citation Envoyé par trin86 Voir le message
    A ce propos quand j'affiche la old value j'obtient toujours null quelque soit les "cochage" que je fais.

    Merci
    Je viens de régler ce problème en mettant une value bean non significative dans la value du checkbox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <h:selectBooleanCheckbox value="#{node}" valueChangeListener="#{EBEssai.handleValueChanged}">
    Me reste toujours le probleme du rerender

    Merci

  5. #5
    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 trin86 Voir le message
    resalut,

    1) j'ai enlevé immidiate=true ça ne change rien lors du rerender
    2) j'ai besoin d'un value change event pour récupérer l'ancienne et la nouvelle valeur du checkbox, donc je ne peux enlever le valuechangelistener. A ce propos quand j'affiche la old value j'obtient toujours null quelque soit les "cochage" que je fais.

    Merci
    - ton bean doit être en scope session ou en keepAlive.

    - enlève le immediate = true.

    - dans le reRender, tu dois mettre le ou les composants à mettre à jour et pas tous le form.

    - pourquoi ne pas utiliser l'actionListener de a4j:support?

  6. #6
    Membre confirmé Avatar de trin86
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 171
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    - ton bean doit être en scope session ou en keepAlive.

    - enlève le immediate = true.

    - dans le reRender, tu dois mettre le ou les composants à mettre à jour et pas tous le form.

    - pourquoi ne pas utiliser l'actionListener de a4j:support?
    1) mon bean est en scope session
    2) j'ai enlevé immidiate=true
    3) je ne peux pas faire le rerender d'un seul noeud car je ne connais pas son id
    4) je ne peux pas utiliser le action listener car l'action event ne me donne pas les valurs ancienne et nouvelle de la case à cocher, seul value change event peut donc j'ai besoin de valuechangelistener

  7. #7
    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
    fait le reRender sur l'arbre entier, et essaye avec switchType = ajax, avec client le composant est géré coté client je ne suis pas sur qu'il soit envoyé au serveur pour une requete ajax.

  8. #8
    Membre confirmé Avatar de trin86
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 171
    Par défaut
    Toujours aucun changement avec ces modif

  9. #9
    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
    la valeur que tu donne est toujours égale à true!! je ne vois pas pourquoi tu veux utiliser l'anciennce valeur, c'est soit true soit false donc tu n'a même pas besoin de valueChangeListener, juste actionListener de a4j:support dans le cas ou tu dois exécuter un traitement coté serveur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h:selectBooleanCheckbox id="noeud" value="#{EBEssai.checkBoxValue}" >
    <a4j:support event="onclick" actionListener="#{EBEssai.handleValueChanged}" reRender="arbre"/></h:selectBooleanCheckbox>

  10. #10
    Membre confirmé Avatar de trin86
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 171
    Par défaut
    resalut,

    Pour ce qui est de la valeur je l'ai remplacé dans mon post précédent.

    Maintenant je ne peux pas coder comme dans votre post parce que mon checkbox est dans chaque noeud du tree et donc je ne peux utiliser une seule value binding sinon tous mes checkbox auront la meme valeur quelque soit lequel je coche.
    C'est pour cela que j'utilise les valeurs anciennes et nouvelles que me donne l'evenement valuechangeevent

    Maintenant si vous connaissez un code fonctionnel pour implémenter différents checkbox dans les noeud d'un tree, et les gérer chacun indépendemment de l'autre, je suis toute ouie.

    Merci.

  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
    tu peux utiliser une map..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:booleanCheckBox value="#{bean.map['nodeId']}" />
    ou ajouter une valeur booléenne dans ton objet de la tree et faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:booleanCheckBox value="#{node.checkedValue}" />

  12. #12
    Membre confirmé Avatar de trin86
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 171
    Par défaut
    Merci sniper finalement la deuxième solution était la bonne.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/01/2012, 18h26
  2. RichFaces - Problème reRender
    Par AeRosS dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 01/02/2011, 17h45
  3. RichFaces - Problème reRender
    Par c.t.k dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 14/07/2010, 20h20
  4. Réponses: 2
    Dernier message: 17/09/2007, 15h08
  5. Réponses: 2
    Dernier message: 18/11/2006, 15h06

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