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 :

gestion de cases a cocher


Sujet :

JSF Java

  1. #1
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut gestion de cases a cocher
    Bonjour,

    voila j'ai une liste de cases à cocher (h:selectManyCheckbox). suiviant les responsabilités de la personne les cases à cocher sont plus ou moins accessibles.
    Par exemple mon application a les roles suivants : administrateur, sous-admin et user

    Un administrateur ne peut pas modifier ses propres roles. Donc les cases à cocher représentant les rôles sont toutes disabled mais je souhaite quand même cocher la case "administrateur" pour qu'il puisse voir son rôle. Ici tout va bien. Le problème c'est au moment ou je valide le formulaire (exemple mise à jour du prénom) alors là JSF repasse dans le constructeur ma liste contient bien l'id du rôle, passe dans ma fonction de création de la liste de rôles puis ensuite passe dans le setter de ma liste qui contient les id sélectionné et l'initialise à une liste vide. du coup mon interface indique que l'administrateur ne posséde aucun rôle alors que se n'est pas vrai

    Avant d'intégrer cette notion de cases à cocher active/inactive je n'avais aucun probleème.

    Comment puis je faire pour que les caches soient non modifiable mais que je puisse savoir si elles sont cochées ou pas?

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

    Avant d'intégrer cette notion de cases à cocher active/inactive je n'avais aucun probleème.

    Comment puis je faire pour que les caches soient non modifiable mais que je puisse savoir si elles sont cochées ou pas?
    les valeurs desabled ne sont pas envoyés aux serveurs.

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    tu connaitrait une methode pour contourner (utiliser un autre objet par exemple)?

  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 Edta Voir le message
    tu connaitrait une methode pour contourner (utiliser un autre objet par exemple)?
    tu peux montrer un bout de code.

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si c'est juste afficher l'information, pourquoi tu ne ferais pas l'équivalent de ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <t:dataList value="#{users.roles}" var="role">
    <h:outputText value="#{role.name}"/>
    <h:outputText value="#{role.enabled?'Active':'Not active'}"/>
    </t:dataList>

  6. #6
    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
    Je comprend pas la question, vu que que la valeur n'est pas setté pourquoi ne pas la traiter comme valeur null dans ton managed bean ???

    Si c'est pas 1 c est donc forcément 0

  7. #7
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    Je vais essayé d'expliquer autrement. J'ai trois rôles : admin, sous admin et user

    Maintenant l'admin veut mettre à jour les rôles d'un user:
    la liste va donc avoir la case à cocher admin disable (il ne peut y avoir qu'un seul admin) et les deux autres actives. dans ce cas pas de problème car la case est inactive et non cochée.

    Maintenant l'admin veut modifier ces données comme c'est sur la même page la liste des rôles est également affichée. Mais un admin ne peut pas modifier ces propre rôles donc dans ce cas toutes les cases à cocher sont disable mais la case admin doit être cochée. Le problème c'est que lorsqu'il valide le formulaire la liste des rôles envoyé par le setteur est nulle alors que je voudrais qu'elle me retourne la case admin cochée dans le constructeur.

    voici mon code jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <h:panelGroup> 
                                                <h:outputText styleClass="#{UpdateUser.isValidRoles ? '' : 'errorMsg'}" value="#{bundle.roles}"/>
                                                <span class="errorMsg">*</span>
                                            </h:panelGroup>
                                            <h:selectManyCheckbox id="roles" layout="PageDirection" value="#{UpdateUser.rolesSelected}">
                                                <f:selectItems value="#{UpdateUser.rolesOptions}"/>
                                            </h:selectManyCheckbox>
    code java
    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
     
    public UpdateUser() throws NamingException {
            loadRolesOptions();
     
            final User user = getCurrentUser();
            login = user.getLogin();
            address = user.getAddress();
            email = user.getEmail();
            lastname = user.getLastName();
            firstname = user.getFirstName();
     
            for (int i = 0; i < user.getRoles().size(); i++) {
                rolesSelected.add(user.getRoles().get(i).getId());
            }
        }
     
    @SuppressWarnings({"unchecked", "unchecked","unchecked"})
        private void loadRolesOptions() {
            this.rolesOptions.clear();
     
            //initialisation des variables: isServerAdministrator, isServerAdministratorUserLogged
     
            //It is impossible to change the role of a serverAdministrator
            if(isServerAdministrator) {
                for (Role role : roles) {
                    item = new SelectItem(role.getId(), bundle.getString("userRole." + role.getType() + ".sum"));
                    item.setDisabled(true);
                    this.rolesOptions.add(item);
                }
     
             // an administrator cannot create another server administrator
            } else if (isServerAdministratorUserLogged) {
                for (Role role : roles) {
                    if(role.getType() == Role.Type.SERVER_ADMINISTRATOR) {
                        item = new SelectItem(role.getId(), bundle.getString("userRole." + role.getType() + ".sum"));
                        item.setDisabled(true);
                        this.rolesOptions.add(item);
                    } else {
                        item = new SelectItem(role.getId(), bundle.getString("userRole." + role.getType() + ".sum"));
                        this.rolesOptions.add(item);
                    }
                }
            } else {
                for (Role role : roles) {
                    item = new SelectItem(role.getId(), bundle.getString("userRole." + role.getType() + ".sum"));
                    item.setDisabled(true);
                    this.rolesOptions.add(item);
                }
            }
        }

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Edta Voir le message
    Mais un admin ne peut pas modifier ces propre rôles donc dans ce cas toutes les cases à cocher sont disable
    Tu peux nous dire où tu met cet état disabled? Parce que, si j'en juge par ton fichier jsf, tu ne traite pas ces disable, donc jsf reçois bel et bien l'ordre de mettre à jour cette propriété avec ce qui a été envoyé par l'utilisateur (rien, donc une lsite vide)

  9. #9
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tu peux nous dire où tu met cet état disabled? Parce que, si j'en juge par ton fichier jsf, tu ne traite pas ces disable, donc jsf reçois bel et bien l'ordre de mettre à jour cette propriété avec ce qui a été envoyé par l'utilisateur (rien, donc une lsite vide)
    Je mets cet état dfisabled dans ma classe Java dans la fonction loadRolesOptions() créé la liste rolesOptions et dans le constructeur je mets les cases cochée dans la liste rolesSelected.

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si tu fais çà, ca rend juste impossible de les choisir, et donc impossible de les soumettre, donc le browser envoie une liste vide de valeurs (comme si elles étaient décochées), donc jsf comme un grand applique ce choix. Tu devrais peut etre plutot t'orienter sur le fait de mettre le composant en disabled:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:selectManyCheckbox id="roles" layout="PageDirection" value="#{UpdateUser.rolesSelected}" disabled="true">
        <f:selectItems value="#{UpdateUser.rolesOptions}"/>
    </h:selectManyCheckbox>
    Ce qui garantira que ce checkbox sera exclu de tout le process jsf hormis le rendu.

  11. #11
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    Cette solution marchera dans le cas ou l'utilisateur admin accède à ses propres choix. Mais si l'admin va sur une page d'une personne qui est user et que je mets la liste en disabled alors il est impossible de l'administrateur de modifier les rôles de cet user (par exemple lui ajouter le rôle de sous-admin)

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu peux mettre le "disabled comme ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    disabled="#{UpdateUser.isAnAdmin}

  13. #13
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    Avec solution ca corrige mon probleme pour l'admin mais pas e sous admin. afin j'ai trouvé une solution. Au lieu de gérer une liste j'ai créé un h:panelGrid qui contient des HtmlSelectBooleanCheckbox se qui me permet de les gérer comme je le souhaite.

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

Discussions similaires

  1. [PHP 5.2] Gestion de cases à cocher[][] grisées ou non
    Par LadyArwen dans le forum Langage
    Réponses: 7
    Dernier message: 28/05/2010, 11h46
  2. [AC-2003] Gestion des cases à cocher
    Par vlksoft dans le forum IHM
    Réponses: 6
    Dernier message: 21/09/2009, 19h22
  3. [MySQL] Gestion de cases à cocher
    Par zizou86 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/02/2008, 16h12
  4. Réponses: 3
    Dernier message: 10/05/2005, 15h20
  5. [Swing]Case a cocher JTable, et Renderer
    Par bibx dans le forum Composants
    Réponses: 16
    Dernier message: 29/12/2004, 14h49

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