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 :

Erreur java.lang.NumberFormatException: For input string: "null" sur clique menuitem


Sujet :

JSF Java

  1. #21
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Je n'appelle jamais moi-même cette méthode.
    Est-ce que ça vient de ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /**
     * Construis le sous-menu "Déconnexion"
     */
    private void buildMenuDeconnexion() {
    	DefaultMenuItem deconnexion = new DefaultMenuItem(getMessage("Deconnexion"), "ui-icon-close");
    //	deconnexion.setOutcome(IUrlLocation.URL_ACCUEIL);
            deconnexion.setCommand("#{menuView.logout}");        
           menuModel.addElement(deconnexion);
    }
    Car c'est le bout de code qui génère l'erreur. Si je le met en commentaire ça fonctionne (enfin il ne se passe rien mais il n'y a pas d'erreur)

  2. #22
    Membre habitué Avatar de Arislas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 116
    Points : 170
    Points
    170
    Par défaut
    Tu as le code de setCommand ?

  3. #23
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void setCommand(String command) {
            this.command = command;
    }
    Et la méthode getCommand() est appelée par la méthode broadcast(...) de org.primefaces.component.menu.AbstractMenu
    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
     
    public void broadcast(FacesEvent event) throws AbortProcessingException {
            if(event instanceof MenuActionEvent) {
                FacesContext facesContext = getFacesContext();
                ELContext eLContext = facesContext.getELContext();
                MenuActionEvent menuActionEvent = (MenuActionEvent) event;
                MenuItem menuItem = menuActionEvent.getMenuItem();
                String command = menuItem.getCommand();
     
                if(command != null) {
                    String actionExpressionString = menuItem.getCommand();
                    MethodExpression noArgExpr = facesContext.getApplication().getExpressionFactory().
                                    createMethodExpression(eLContext,actionExpressionString, 
                                                                String.class, new Class[0]);
                    Object outcome = null;
     
                    try {
                        outcome = noArgExpr.invoke(eLContext, null);
                    } 
                    catch(MethodNotFoundException methodNotFoundException) {
                        try {
                            MethodExpression argExpr = facesContext.getApplication().getExpressionFactory().
                                    createMethodExpression(eLContext, actionExpressionString, 
                                                                String.class, new Class[]{ActionEvent.class});
     
                            outcome = argExpr.invoke(eLContext, new Object[]{event});
                        }
                        catch(MethodNotFoundException methodNotFoundException2) {
                            MethodExpression argExpr = facesContext.getApplication().getExpressionFactory().
                                    createMethodExpression(eLContext, actionExpressionString, 
                                                                String.class, new Class[]{MenuActionEvent.class});
     
                            outcome = argExpr.invoke(eLContext, new Object[]{event});
                        }
                    }
                    finally {
                        if(outcome != null) {
                            facesContext.getApplication().getNavigationHandler().handleNavigation(facesContext, actionExpressionString, outcome.toString());
                        }
                    }
                }
     
            }
            else {
                super.broadcast(event);
            }
        }

  4. #24
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Dans la mesure où ta méthode "logout" fait déjà une redirection, il ne faut pas essayer d'en refaire une...

    Pour le reste, dans le principe, quel intérêt de construire ton menu dynamiquement ? Il serait plus simple de conditionner les options de menu en fonction de ton état : connecté ou déconnecté
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Hého, faut arrêter de se concentrer le parseInt, ce n'est que la conséquence de l'erreur

    Le problème ici c'est que pour une raison ou une autre, un menuitem (pas nécessairement celui que tu montre) n'a pas reçu d'id par JSF/primefaces, alors qu'il est supposé avoir un id tu type <parent>.<index>, du coup la méthode reçois null, que le renderer essaie de parser en int. Il faudrait montrer un peu plus ton code, nottement comment ton menu est construit. Attacher le html que vois le browser et ta facelet aiderais aussi à voir où est le problème.
    Et comme OButterlin l'a dit, j'ai l'impression que tu fais trop compliqué, il suffirait de mettre un rendered= qui utilise l'état connecté / non connecté pour afficher ou cacher l'item du menu.

  6. #26
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Bonjour,

    Alors je construis le menu dynamiquement car en fonction du rôle et des droits de l'utilisateur connecté, il aura accès à différents paramétrage (qu'un utilisateur lambda n'aura pas) par exemple.

    Je n'y comprends plus rien, ça fonctionne, alors que je n'ai rien changé de spécial.
    Mais j'ai remarqué le même phénomène avec un tableau ayant une action pour ajouter et supprimer des lignes. La suppression ne fonctionne que si j'ai d'abord fait une insertion...

    Pour ce qui est du code, voici la page principale, le Template (entête, menu, bas de page et contenu) qui insert le contenu au centre de la page:
    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
     
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:p="http://primefaces.org/ui"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:ui="http://java.sun.com/jsf/facelets">
    <f:view locale="#{changeLocale.locale}">
    	<h:head>
    		<title>JSF</title>
    		<h:outputStylesheet library="css" name="styles.css" />
    	</h:head>
    	<h:body
    		style="background-image: url('${request.contextPath}/resources/images/standard.jpg');">
    		<!-- <h:form id="formulaire">
    			<p:growl id="messages" life="2000" /> -->
    			<div align="center" style="height:140px">
    				<h:graphicImage value="/resources/images/RWB_Logo.jpg" />
        			<div>
          				<p:commandLink value="#{msg['Francais']}" actionListener="#{changeLocale.setFrenchLocale}" update=":formulaire"/>
          				<p:spacer width="20px"/>
          				<p:commandLink value="#{msg['Anglais']}" actionListener="#{changeLocale.setEnglishLocale}" update=":formulaire"/>
      				</div>
    			</div>
    			<p:layout style="min-width:1000px; min-height:830px;">
    				<p:layoutUnit position="center">
    					<table>
    						<tr>
    							<td colspan="2" style="width: 1400px">
    								<p:megaMenu orientation="horizontal" style="margin-top:0px;" model="#{menuView.menuModel}" />
    							</td>
    						</tr>
    						<tr valign="top" style="height:650px;">
    							<td>
    								<p:outputPanel id="contenu">
    									<ui:insert name="contenu">
    										<ui:include src="../divers/accueil.xhtml" />
    									</ui:insert>
    								</p:outputPanel>
    							</td>
    						</tr>
    					</table>
    				</p:layoutUnit>
    			</p:layout>
    			<div align="center" style="height:20px">
    				<div style="text-align:right">
    					<table style="width:100%">
    						<tr>
    							<td><h:outputText value="#{msg['Copyright']}"/></td>
    							<td><h:outputText value="#{msg['ConnecteEnTantQue']} : #{sessionScope.user.login}"/></td>
    						</tr>
    					</table>
       				</div>
    			</div>
    		<!-- </h:form> -->
    	</h:body>
    </f:view>
    </html>
    Le ManagedBean de création du Menu :
    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
     
    @ManagedBean
    @SessionScoped
    public class MenuView implements Serializable {
     
    	private static final long serialVersionUID = 1L;
     
    	private static final String ID_UPDATE = "messages";
     
    	private Employe user = null;
        private MenuModel menuModel = null;
     
        /**
         * Construis le sous-menu "Accueil"
         */
        private void buildMenuAccueil() {
        	DefaultMenuItem accueil = new DefaultMenuItem(getMessage("Accueil"), "ui-icon-home");
            accueil.setOutcome(IUrlLocation.URL_ACCUEIL);
            menuModel.addElement(accueil);
        }
     
        /**
             * Construis le sous-menu "Administration"
             */
    	private void buildMenuAdministration() {
    		if (user != null && user.isAdmin()) {
    			DefaultSubMenu administration = new DefaultSubMenu(
    					getMessage("Administration"), "ui-icon-login");
     
    			// Administration -> Organisation
    			DefaultSubMenu organisationGestion = new DefaultSubMenu(getMessage("Organisation"));
     
    			// Administration -> Gestion -> Gestion sociétés
    			DefaultMenuItem gestionSocietes = new DefaultMenuItem(
    					getMessage("Societes"));
    			gestionSocietes.setOutcome(IUrlLocation.URL_GESTION_SOCIETES);
    			gestionSocietes.setUpdate(ID_UPDATE);
    			organisationGestion.addElement(gestionSocietes);
     
    			// Administration -> Gestion -> Gestion des départements
    			DefaultMenuItem gestionDepartements = new DefaultMenuItem(getMessage("Departements"));
    			gestionDepartements.setOutcome(IUrlLocation.URL_GESTION_DEPARTEMENTS);
    			gestionDepartements.setUpdate(ID_UPDATE);
    			organisationGestion.addElement(gestionDepartements);
     
    			// Administration -> Gestion -> Gestion des domaines d'intervention
    			DefaultMenuItem gestionDomainesIntervention = new DefaultMenuItem(getMessage("DomainesDIntervention"));
    			gestionDomainesIntervention.setOutcome(IUrlLocation.URL_GESTION_DOMAINES_INTERVENTION);
    			gestionDomainesIntervention.setUpdate(ID_UPDATE);
    			organisationGestion.addElement(gestionDomainesIntervention);
     
    			// Administration -> Gestion
    			DefaultSubMenu adminGestion = new DefaultSubMenu(getMessage("Gestion"));
     
    			// Administration -> Gestion -> Gestion des utilisateurs
    			DefaultMenuItem gestionUtilisateurs = new DefaultMenuItem(getMessage("Utilisateurs"));
    			gestionUtilisateurs.setOutcome(IUrlLocation.URL_GESTION_USERS);
    			gestionUtilisateurs.setUpdate(ID_UPDATE);
    			adminGestion.addElement(gestionUtilisateurs);
     
    			// Administration -> Gestion -> Gestion des employés
    			DefaultMenuItem gestionEmployes = new DefaultMenuItem(getMessage("Employes"));
    			gestionEmployes.setOutcome(IUrlLocation.URL_GESTION_EMPLOYES);
    			gestionEmployes.setUpdate(ID_UPDATE);
    			adminGestion.addElement(gestionEmployes);
     
    			// Administration -> Gestion -> Gestion des dossiers
    			DefaultMenuItem gestionDossiers = new DefaultMenuItem(getMessage("Dossiers"));
    			gestionDossiers.setOutcome(IUrlLocation.URL_GESTION_DOSSIERS);
    			gestionDossiers.setUpdate(ID_UPDATE);
    			adminGestion.addElement(gestionDossiers);
     
    			DefaultMenuColumn adminGestionColumn = new DefaultMenuColumn();
    			adminGestionColumn.addElement(organisationGestion);
    			adminGestionColumn.addElement(adminGestion);
     
    			administration.addElement(adminGestionColumn);
    			menuModel.addElement(administration);
    		}
    	}
     
    	/**
             * Construis le sous-menu "Gestion des heures"
             */
    	private void buildMenuHeures() {
            DefaultSubMenu gestionHeures = new DefaultSubMenu(getMessage("GestionDesHeures"), "ui-icon-clock");
     
            // Gestion des heures -> Gestion
         	DefaultSubMenu adminGestion = new DefaultSubMenu(getMessage("Gestion"));
     
            // Gestion des heures -> Gestion -> Saisie des heures
            DefaultMenuItem saisieHeures = new DefaultMenuItem(getMessage("Saisie"));
            saisieHeures.setOutcome(IUrlLocation.URL_SAISIE_HEURES);
            saisieHeures.setUpdate(ID_UPDATE);
            adminGestion.addElement(saisieHeures);
     
            DefaultMenuColumn heuresGestionColumn = new DefaultMenuColumn();
    		heuresGestionColumn.addElement(adminGestion);
     
    		gestionHeures.addElement(heuresGestionColumn);
            menuModel.addElement(gestionHeures);
    	}
     
    	/**
             * Construis le sous-menu "Déconnexion"
             */
    	private void buildMenuDeconnexion() {
    		DefaultMenuItem deconnexion = new DefaultMenuItem(getMessage("Deconnexion"), "ui-icon-close");
    //		deconnexion.setOutcome(IUrlLocation.URL_ACCUEIL);
            deconnexion.setCommand("#{menuView.logout}");
            menuModel.addElement(deconnexion);
    	}
     
        /**
         * Retourne le model du menu et construis si necéssaire le menu
         */
        public MenuModel getMenuModel() {
        	FacesContext context = FacesContext.getCurrentInstance();
            ExternalContext externalContext = context.getExternalContext();
            HttpSession session = ((HttpServletRequest) externalContext.getRequest()).getSession();
     
            Employe currentUser = (Employe) session.getAttribute("user");
    		if (menuModel != null && currentUser == user) {
    			return menuModel;
    		}
    		user = currentUser;
     
            menuModel = new DefaultMenuModel();
            buildMenuAccueil();
            buildMenuAdministration();
            buildMenuHeures();
            buildMenuDeconnexion();
     
            return menuModel;
        }
     
    	/**
             * Méthode de déconnexion de l'utilisateur
             */
    	public void logout() {
    		FacesContext context = FacesContext.getCurrentInstance();
    		ExternalContext externalContext = context.getExternalContext();
     
    		try {
    			HttpSession session = ((HttpServletRequest) externalContext
    					.getRequest()).getSession();
    			session.invalidate();
     
    			externalContext.redirect(externalContext.getRequestContextPath() + IUrlLocation.URL_LOGIN);
    		} catch (Exception e) {
    			context.addMessage(null, new FacesMessage(e.getMessage()));
    		}
    	}
     
    	/**
             * Méthode de génération des textes
             * 
             * @param cle : la clé du texte à traduire
             * @return le texte traduit selon la locale
             */
    	private String getMessage(String cle) {
    		return Messages.getMessage(cle, null)
    				.getSummary();
    	}
    }
    Voici le code html vu par le navigateur :
    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
     
     
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml"><head><link type="text/css" rel="stylesheet" href="/rwb/javax.faces.resource/theme.css.xhtml?ln=primefaces-afternoon" /><link type="text/css" rel="stylesheet" href="/rwb/javax.faces.resource/styles.css.xhtml?ln=css" /><link type="text/css" rel="stylesheet" href="/rwb/javax.faces.resource/primefaces.css.xhtml?ln=primefaces&amp;v=5.1" /><link type="text/css" rel="stylesheet" href="/rwb/javax.faces.resource/layout/layout.css.xhtml?ln=primefaces&amp;v=5.1" /><script type="text/javascript" src="/rwb/javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces&amp;v=5.1"></script><script type="text/javascript" src="/rwb/javax.faces.resource/jquery/jquery-plugins.js.xhtml?ln=primefaces&amp;v=5.1"></script><script type="text/javascript" src="/rwb/javax.faces.resource/primefaces.js.xhtml?ln=primefaces&amp;v=5.1"></script><script type="text/javascript" src="/rwb/javax.faces.resource/layout/layout.js.xhtml?ln=primefaces&amp;v=5.1"></script>
    		<title>JSF</title></head><body style="background-image: url('/rwb/resources/images/standard.jpg');">
    		<div id="formulaire">
     
    			<div align="center" style="height:140px"><img src="/rwb/resources/images/Logo.jpg" />
     
    			</div><script id="j_idt9_s" type="text/javascript">$(function(){PrimeFaces.cw("Layout","widget_j_idt9",{id:"j_idt9",widgetVar:"widget_j_idt9",center:{paneSelector:'#j_idt10',size:"auto",resizable:false,closable:false}},"layout");});</script><div id="j_idt9" style="min-width:1000px; min-height:830px;"><div id="j_idt10" class="ui-layout-unit ui-widget ui-widget-content ui-corner-all ui-layout-center"><div class="ui-layout-unit-content ui-widget-content">
    					<table>
    						<tr>
    							<td colspan="2" style="width: 1400px">
    <form id="menuForm" name="menuForm" method="post" action="/rwb/secured/divers/accueil.xhtml" enctype="application/x-www-form-urlencoded">
    <input type="hidden" name="menuForm" value="menuForm" />
    <div id="menuForm:j_idt12" class="ui-menu ui-menubar ui-megamenu ui-widget ui-widget-content ui-corner-all ui-helper-clearfix" style="margin-top:0px;" role="menubar"><ul class="ui-menu-list ui-helper-reset"><li class="ui-menuitem ui-widget ui-corner-all" role="menuitem"><a tabindex="-1" class="ui-menuitem-link ui-corner-all" href="/rwb/secured/divers/accueil.xhtml"><span class="ui-menuitem-icon ui-icon ui-icon-home"></span><span class="ui-menuitem-text">Accueil</span></a></li><li class="ui-widget ui-menuitem ui-corner-all ui-menu-parent" role="menuitem" aria-haspopup="true"><a href="#" class="ui-menuitem-link ui-submenu-link ui-corner-all"><span class="ui-menuitem-icon ui-icon ui-icon-login"></span><span class="ui-menuitem-text">Administration</span><span class="ui-icon ui-icon-triangle-1-s"></span></a><ul class="ui-widget-content ui-menu-list ui-corner-all ui-helper-clearfix ui-menu-child ui-shadow" role="menu"><table><tbody><tr><td><ul class="ui-menu-list ui-helper-reset" role="menu"><li class="ui-widget-header ui-corner-all"><h3>Organisation</h3></li><li class="ui-menuitem ui-widget ui-corner-all" role="menuitem"><a tabindex="-1" class="ui-menuitem-link ui-corner-all" href="/rwb/secured/parametrage/gestion/gestionSocietes.xhtml"><span class="ui-menuitem-text">Sociétés</span></a></li><li class="ui-menuitem ui-widget ui-corner-all" role="menuitem"><a tabindex="-1" class="ui-menuitem-link ui-corner-all" href="/rwb/secured/parametrage/gestion/gestionDepartements.xhtml"><span class="ui-menuitem-text">Départements</span></a></li><li class="ui-menuitem ui-widget ui-corner-all" role="menuitem"><a tabindex="-1" class="ui-menuitem-link ui-corner-all" href="/rwb/secured/parametrage/gestion/gestionDomainesIntervention.xhtml"><span class="ui-menuitem-text">Domaines d'intervention</span></a></li></ul><ul class="ui-menu-list ui-helper-reset" role="menu"><li class="ui-widget-header ui-corner-all"><h3>Gestion</h3></li><li class="ui-menuitem ui-widget ui-corner-all" role="menuitem"><a tabindex="-1" class="ui-menuitem-link ui-corner-all" href="/rwb/secured/parametrage/gestion/gestionUtilisateurs.xhtml"><span class="ui-menuitem-text">Utilisateurs</span></a></li><li class="ui-menuitem ui-widget ui-corner-all" role="menuitem"><a tabindex="-1" class="ui-menuitem-link ui-corner-all" href="/rwb/secured/parametrage/gestion/gestionEmployes.xhtml"><span class="ui-menuitem-text">Employés</span></a></li><li class="ui-menuitem ui-widget ui-corner-all" role="menuitem"><a tabindex="-1" class="ui-menuitem-link ui-corner-all" href="/rwb/secured/parametrage/gestion/gestionDossiers.xhtml"><span class="ui-menuitem-text">Dossiers</span></a></li></ul></td></tr></tbody></table></ul></li><li class="ui-widget ui-menuitem ui-corner-all ui-menu-parent" role="menuitem" aria-haspopup="true"><a href="#" class="ui-menuitem-link ui-submenu-link ui-corner-all"><span class="ui-menuitem-icon ui-icon ui-icon-clock"></span><span class="ui-menuitem-text">Gestion des heures</span><span class="ui-icon ui-icon-triangle-1-s"></span></a><ul class="ui-widget-content ui-menu-list ui-corner-all ui-helper-clearfix ui-menu-child ui-shadow" role="menu"><table><tbody><tr><td><ul class="ui-menu-list ui-helper-reset" role="menu"><li class="ui-widget-header ui-corner-all"><h3>Gestion</h3></li><li class="ui-menuitem ui-widget ui-corner-all" role="menuitem"><a tabindex="-1" class="ui-menuitem-link ui-corner-all" href="/rwb/secured/heures/saisieHeures.xhtml"><span class="ui-menuitem-text">Saisie</span></a></li></ul></td></tr></tbody></table></ul></li><li class="ui-menuitem ui-widget ui-corner-all" role="menuitem"><a tabindex="-1" class="ui-menuitem-link ui-corner-all" href="#" onclick="PrimeFaces.ab({s:'menuForm:j_idt12',g:false,pa:[{name:'menuForm:j_idt12_menuid',value:'3'}],f:'menuForm'});return false;"><span class="ui-menuitem-icon ui-icon ui-icon-close"></span><span class="ui-menuitem-text">Déconnexion</span></a></li></ul></div><script id="menuForm:j_idt12_s" type="text/javascript">PrimeFaces.cw("MegaMenu","widget_menuForm_j_idt12",{id:"menuForm:j_idt12",widgetVar:"widget_menuForm_j_idt12",autoDisplay:true});</script><input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-6790621957841964884:-2282119965783281594" autocomplete="off" />
    </form>
    							</td>
    						</tr>
    						<tr valign="top" style="height:650px;">
    							<td><div id="contenu" class="ui-outputpanel ui-widget"><img src="/rwb/resources/images/terre.jpg" /></div>
    							</td>
    						</tr>
    					</table></div></div></div>
    			<div align="center" style="height:20px">
    				<div style="text-align:right">
    					<table style="width:100%">
    						<tr>
    							<td>Copyright © 2015 - Tous droits réservés</td>
    							<td>Connecté en tant que : jean</td>
    						</tr>
    					</table>
       				</div>
    			</div>
     
    		</div></body>
    </html>

  7. #27
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par doons Voir le message
    Alors je construis le menu dynamiquement car en fonction du rôle et des droits de l'utilisateur connecté, il aura accès à différents paramétrage (qu'un utilisateur lambda n'aura pas) par exemple.
    Tu aurais pu utiliser l'attribut "rendered" pour conditionner
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ton buildMenuModel construit dynamiquement un modèle mais surtout jette le model précédent si le user a changé. C'est important si tu change le user au mauvais moment.

    Pour que le processRequest fonctionne, les menuitem doivent recevoir leur id
    Ils recoivent leur id durant le render request, qui a lieu juste après les actions.
    Si tu change l'utilisateur ailleurs que durant l'action ou si le model n'est pas utilisé par la réponse, au premier besoin (apply request value) qui va suivra durant le submit suivant, JSF va se retrouver avec un model qui n'a jamais subit de rendering et sur lequel il est censé appliquer le "apply request value".

    Donc en gros tu dois avoir cette séquence:

    action -> nouveau model -> rendu -> affichage -> submit -> apply request value -> ....

    et non pas
    rendu -> affichage -> submit -> nouveau model -> apply request value -> ....

  9. #29
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Merci pour vos messages

    @OButterlin : Ok je vais voir comment fonctionne l'attribut "rendered"

    @tchize_ : D'accord mais pour être honnête, j'ai un peu de mal à te suivre. Comment estce que je peux gérer cette séquence ?

    Merci beaucoup à vous pour votre aide

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par doons Voir le message
    @tchize_ : D'accord mais pour être honnête, j'ai un peu de mal à te suivre. Comment estce que je peux gérer cette séquence ?
    Tu ne peux pas. Le seul contrôle que tu as c'est quand tu change le user dans la session, puisque c'est quelque chose que tu fais toi.

    En général en JSF on évite de changer dynamiquement l'arbre de composant, ce n'est pas vraiment prévu pour. Si des éléments sont conditionnels, on les cache plutôt que de tenter de les supprimer.
    L'attribut rendered c'est à ça, tu lui donne une expression qui s'évalue comme un boolean et qui dit si le composant doit être affiché ou pas.

    Dans ton cas par exemple, un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <p:menuitem value="Gestion" action="....." update="messages" icon="ui-icon-disk" rendered="#{menuView.userAdmin}"/>
    et dans menuVieuw

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public boolean isUserAdmin(){
    ...
    }
    En plus ça t'évite de mélanger interface et code java, tout ce qui concerne la plomberie reste dans le xhtml, comme les EL des action command.

    JSF te garantis qu'un composant qui n'est pas "Rendered" ne pourra pas être validé et que son action ne pourra pas être appelée, donc pas de soucis de sécurité de ce coté là.

  11. #31
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    D'accord, très bien.

    En fait je faisais la reconstruction du menu car au début j'avais la possibilité de changer la langue pour l'utilisateur et je n'avais pas trouvé d'autres moyens que de reconstruire le menu ...
    Finalement j'ai opté pour enregistrer la langue dans l'utilisateur, solution qui parait plus logique.

    En plus, il n'est pas possible de changer d'utilisateur sans se déconnecter (et ainsi supprimer la session) par contre, je teste si l'utilisateur est connecté car si je demande une adresse nécessitant une connexion avec d'être connecté, je suis redirigé sur la page de login, mais je passe d'abord dans ma méthode de construction du menu du coup je contrôle que l'utilisateur soit enregistré pour créer le modèle et ainsi ne construire que les menus auxquels il a droit.

    Maintenant que vous avez parlé de l'attribut "rendered" je vais utiliser cela

    Merci beaucoup à tous pour votre aide, que je devrai surement solliciter à nouveau prochainemeent

  12. #32
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par doons Voir le message
    Merci beaucoup à tous pour votre aide, que je devrai surement solliciter à nouveau prochainemeent
    Pas de soucis
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. java.lang.NumberFormatException: For input string: ""
    Par momjunior dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 24/04/2019, 00h50
  2. Réponses: 2
    Dernier message: 21/06/2013, 12h33
  3. Réponses: 0
    Dernier message: 06/05/2010, 10h43
  4. Réponses: 5
    Dernier message: 20/11/2009, 13h18
  5. Réponses: 1
    Dernier message: 15/01/2009, 11h22

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