+ Répondre à la discussion Actualité déjà publiée
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 29
  1. #1
    Responsable Eclipse et JAVA

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    juillet 2005
    Messages
    7 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : juillet 2005
    Messages : 7 312
    Points : 38 269
    Points
    38 269

    Par défaut Participez à la FAQ JSF

    Bonjour,

    La F.A.Q JSF est ouverte à tous, vous pouvez donc y participer activement.

    N'hésitez pas à poster vos questions et réponses dans cette enfilade.

    Attention à ne pas s'éloigner du cadre de JSF en débordant sur la FAQ Java EE.

    Merci à tous pour vos contributions
    Ingénieur de Recherche en informatique au LIAS / ENSMA
    Responsable des rubriques Eclipse et Java de Developpez.com

    Page de cours : mbaron.developpez.com
    Blog : keulkeul.blogspot.com
    Page Pro : www.lias-lab.fr/members/mickaelbaron
    LinkedIn : www.linkedin.com/in/mbaron
    Twitter : www.twitter.com/mickaelbaron

  2. #2
    Rédacteur/Modérateur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    juillet 2005
    Messages
    3 765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2005
    Messages : 3 765
    Points : 7 223
    Points
    7 223

    Par défaut

    Q: Comment créer un composant personnalisé par composition ?

    R: Tout d'abord, il faut disposer de la librairie Facelets.

    Etape 1: Créer le fichier XHTML du composant.
    Créons par exemple le fichier myComponentCompositionPage.xhtml dans le répertoire tag:

    Code :
    1
    2
    3
    4
     
    <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" ...>
        <!-- Code JSF du composant -->
    </ui:composition>
    Etape 2: Ajouter la définition du composant dans le Taglib Facelets (dans un fichier xxx.taglib.xml)

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <facelet-taglib>
        <namespace>http://my.components/jsf</namespace>
        ...
        <tag>
            <tag-name>componentName</tag-name>
            <source>tags/myComponentCompositionPage.xhtml</source>
        </tag>
    </facelet-taglib>
    Etape 3: Utilisation dans son code:

    Code :
    1
    2
    3
    4
    5
     
    <html xmlns:my ...>
        ...
        <my:componentName .../>
        ...
    Astuce: Donner des attributs à son composant.

    En écrivant :
    Code :
    1
    2
     
    <my:componentName unAttribut="uneValeur"/>
    on peut récupérer la valeur de cet attribut dans sa composition ainsi :

    Code :
    1
    2
    3
    4
     
    <ui:composition ...>
        <h:outputText value="#{unAttribut}"/>
        ...
    Avantages: Facile et rapide à écrire et à intégrer.
    Inconvénients : Ne permet pas de définir l'ID de son composant, composition parfois complexe à écrire (nécessite beaucoup d'expression EL).
    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

  3. #3
    Rédacteur/Modérateur

    Inscrit en
    juin 2003
    Messages
    4 184
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 4 184
    Points : 4 815
    Points
    4 815

    Par défaut

    Question: Comment désactiver le cache du browser coté serveur ?

    Réponse:

    - Implementer le phase listner:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public class  CacheControlePhaseListener implements javax.faces.event.PhaseListener {
     
    	public void afterPhase(PhaseEvent arg0) {
     
    	}
     
                public void beforePhase(PhaseEvent event) {
     
    		// manage cache controle
     
    		FacesContext context = event.getFacesContext();
    		HttpServletResponse response = (HttpServletResponse)  context.getExternalContext().getResponse();
     
      response.addHeader("Cache-Control", "no-chache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform, pre-check=0, post-check=0, private");
     
     }
     
    	public PhaseId getPhaseId() {
     
    		return PhaseId.ANY_PHASE;
    	}
     
    }
    il suffit ensuite de déclarer le listener

    Code :
    1
    2
     <lifecycle>     <phase-listener>net.developpez.faq.CacheControlePhaseListener</phase-listener>
       </lifecycle>

  4. #4
    Rédacteur/Modérateur

    Inscrit en
    juin 2003
    Messages
    4 184
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 4 184
    Points : 4 815
    Points
    4 815

    Par défaut

    Question: comment récupérer la valeur d'un bean en session? [JSF1.2]

    Réponse

    la réponse présente dans la FAQ contient des méthodes devenues deprecated dans la version 1.2 de JSF :

    En 1.2, on doit utiliser ValueExpression au lieu de ValueBinding:

    Code :
    SessionBean sessionBean = (SessionBean ) context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), "#{sessionBean}",SessionBean.class).getValue(context.getELContext());
    [edit=djo.mos]
    Intégré [avec modifications: ce n'est pa slimité aux beans sessions]

  5. #5
    Nouveau Membre du Club
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : septembre 2007
    Messages : 79
    Points : 36
    Points
    36

    Par défaut

    Q: Comment charger des fichiers de ressources (Javascript, CSS, etc.) à partir d'un JAR ?

    R: 5 façons pour y remedier :


    1) avec une servlet qui va localiser les ressources
    2) avec un servlet filter, tout comme Myfaces tomahawk extension Filter
    3) en utilisant weblet ça nécessite un fichier de configuration weblet-config.xml
    4) en utilisant le composant <a4j:loadScript> :

    par exemple si le chemin dans le fichier jar est : /resources/js/myscript.js alors mettre dans la page jsf
    Code :
    1
    2
    3
    4
    <a4j:loadScript src="resource///resources/js/myscript.js"/>
    
    // tès important ne pas oublier le préfix resource//
    5) et enfin avec un Phase Listener dont voici le détail comment y remédier :


    Il faut définir le Phase Listener qui va charger/contrôler les url
    Code :
    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
     
    package myPackage;
     
    /**
    * @author Mediii.
    */
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.HashMap;
    import java.util.Map;
    import javax.faces.FacesException;
    import javax.faces.application.ViewHandler;
    import javax.faces.context.ExternalContext;
    import javax.faces.context.FacesContext;
    import javax.faces.event.PhaseEvent;
    import javax.faces.event.PhaseId;
    import javax.faces.event.PhaseListener;
    import javax.servlet.http.HttpServletResponse;
     
    public class ResourcePhaseListener implements PhaseListener {
     
       public static final String RESOURCE_PREFIX = "/resource";
     
       public static final String RESOURCE_LOCATION_PARAM = "r";
     
       public static final String CONTENT_TYPE_PARAM = "ct";
     
       public static final String DEFAULT_CONTENT_TYPE = "application/octet-stream";
     
       private Map<String, String> extensionToContentType = null;
     
       public ResourcePhaseListener() {
          extensionToContentType = new HashMap<String, String>();
          extensionToContentType.put(".js", "text/javascript");
          extensionToContentType.put(".gif", "image/gif");
          extensionToContentType.put(".jpg", "image/jpeg");
          extensionToContentType.put(".jpeg", "image/jpeg");
          extensionToContentType.put(".png", "image/png");
          extensionToContentType.put(".css", "text/css");
       }
     
       public PhaseId getPhaseId() {
          return PhaseId.RESTORE_VIEW;
       }
     
       public void beforePhase(PhaseEvent phaseEvent) {
       }
     
       public void afterPhase(PhaseEvent event) {
          if (event.getFacesContext().getViewRoot().getViewId().startsWith(
                RESOURCE_PREFIX)) {
             FacesContext context = event.getFacesContext();
             ExternalContext external = context.getExternalContext();
     
             String resourcePath =
                   (String) external.getRequestParameterMap().get(
                         RESOURCE_LOCATION_PARAM);
             if (resourcePath == null)
                return;
     
             String contentType =
                   (String) external.getRequestParameterMap().get(
                         CONTENT_TYPE_PARAM);
             if (contentType == null) {
                int extensionIndex = resourcePath.lastIndexOf(".");
                if (extensionIndex != -1)
                   contentType =
                         extensionToContentType.get(resourcePath
                               .substring(extensionIndex));
                if (contentType == null)
                   contentType = DEFAULT_CONTENT_TYPE;
             }
     
             InputStream in = getClass().getResourceAsStream(resourcePath);
             HttpServletResponse servletResponse =
                   (HttpServletResponse) external.getResponse();
             try {
                OutputStream out = servletResponse.getOutputStream();
                servletResponse.setContentType(contentType);
                int ch;
                while ((ch = in.read()) != -1)
                   out.write(ch);
             } catch (IOException ex) {
                throw new FacesException(ex);
             }
             context.responseComplete();
          }
       }
     
       /**
        * Returns a URL for fetching a resource through this listener
        * 
        * @param context the faces context
        * @param String resourcePath the path to the resource
        * @param String contentType the content type to include in the URL, or null
        *           if no content type should be included
        * @return the URL of the form
        *         /appname/resource.faces?r=resourcePath,ct=contentType or
        *         /appname/faces/resource?r=resourcePath,ct=contentType
        */
       public static String getURL(FacesContext context, String resourcePath,
             String contentType) {
          ViewHandler handler = context.getApplication().getViewHandler();
     
          String url = handler.getActionURL(context, RESOURCE_PREFIX);
          StringBuilder r = new StringBuilder(url);
          r.append("?" + RESOURCE_LOCATION_PARAM + "=").append(resourcePath);
          if (contentType != null)
             r.append("," + CONTENT_TYPE_PARAM + "=").append(contentType);
          return r.toString();
       }
    }
    ensuite dans le renderer d'un composant on peut appeler un script contenu dans un jar par exemple si le chemin est resources/js/myscript.js alors on ecrira :

    Code :
    1
    2
    3
    4
    5
    6
    7
    ...
    writer.startElement("script", component);
    writer.writeAttribute("src", ResourcePhaseListener.getURL(context, "/resources/js/myscript.js", null), null);
    writer.writeAttribute("type", "text/javascript", null);
    writer.endElement("script");
    ...
    ne pas oublier de déclarer dans le faces-config.xml notre phaseListener

    Code :
    1
    2
    3
    4
    5
     
     
    <lifecycle>
            <phase-listener>myPackage.ResourcePhaseListener</phase-listener>
    </lifecycle>

  6. #6
    Rédacteur/Modérateur

    Inscrit en
    juin 2003
    Messages
    4 184
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 4 184
    Points : 4 815
    Points
    4 815

    Par défaut

    Question: comment invalider la session d'un user ?

    Réponse:
    Code :
    1
    2
     
    <h:commandButton action="monBean.disconnect" />

    Code :
    1
    2
    3
    4
    5
    6
    7
     
    public String  disconnect() {
    FacesContext context = FacesContext.getCurrentInstance().getCurrentInstance();	
    HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
    session.invalidate();
    return "login";
    }
    [edit=djo.mos]
    Intégré

  7. #7
    Rédacteur/Modérateur

    Inscrit en
    juin 2003
    Messages
    4 184
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 4 184
    Points : 4 815
    Points
    4 815

    Par défaut

    Question: comment prévenir l'accès direct au pages jsf?

    Réponse:
    la spécification des servlets interdit l'accés au contenu des dossiers /WEB-INF/ et /META-INF/ d'une application web.
    la solution serait de mettre les pages JSP dans le dossier /WEB-INF/
    ainsi un exemple de navigation:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
    <navigation-rule>
        <from-view-id>/login.jsp</from-view-id>
        <navigation-case>
          <from-outcome>accepted</from-outcome>
          <to-view-id>/WEB-INF/index.jsp</to-view-id>
        </navigation-case>
      </navigation-rule>
    NB: cette méthode a été testé avec myfaces 1.1.5 sans utiliser les facelets, il semble que cela ne fonctionne pas avec les facelets..
    à suivre..

  8. #8
    Candidat au titre de Membre du Club
    Inscrit en
    octobre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 9
    Points : 10
    Points
    10

    Par défaut Comment gérer l'expiration de session dans JSF

    Question: Comment échaper au pièges des sessions qui expirent en JSF ?

    Coté interface:

    Notamment avec JSF 1.2. RI Quand on clique sur une page d'une session expirée, des erreurs sont affichées dans la trace et on a une page blanche.

    La page est obtenue par l'envoi d'un formulaire dans lequel il y a une variable ViewState. Le serveur prend cela pour un POST BACK. Il essaie donc de récupérer les infos de la vue. Quand ces infos sont stockées sur le serveur et que la session a expiré, il n'y arrive pas et lance une erreur. Si on a choisi de sauver les informations sur le client, normalement ce problème n'arrive pas.

    Si on cherche uniquement à re-obtenir la page, le mieux est de revenir au mode compatibilité JSF 1.1 en mettant ceci dans le web.xml

    Code :
    1
    2
    3
    4
    <context-param>
    <param-name>com.sun.faces.enableRestoreView11Compatibility</param-name>
    <param-value>true</param-value>
    </context-param>
    Si on veut faire quelquechose de plus particulier, il faut détecter le cas par un PhaseListener qui s'éxécute avant la phase RESTORE_VIEW et que l'on déclare dans le face-config.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class SessionExpirationListener implements PhaseListener {
     
    public PhaseId getPhaseId() {
    	return PhaseId.RESTORE_VIEW;
    }
     
    public void beforePhase(PhaseEvent event) {
    // Faire quelquechose ...
    }
     
    public void afterPhase(PhaseEvent event) {
    // Rien a faire ici
    }
    }
    Il y a un exemple ici http://solutionsfit.com/blog/2007/11...seam-security/
    au aura toujours du mal à faire la différence entre un ViewState expiré et un neuf sans demander au composant qui gère les ViewStates.

    On peut enfin encore mieux gérer le problème comme ici (pas encore essayé) http://in.relation.to/Bloggers/Imple...amJSFAndJQuery
    En résumé, il demande au serveur confirmation de l'expiration par AJAX 3 secondes après la fin. Il désactive alors tous les liens et boutons et prévient l'utilisateur. Ce dernier peut recopier ses données (et lui dit merci dans le cas d'un long texte) mais doit re-initialiser la session.

    Coté données:

    Je fait implémenter l'interface javax.servlet.http.HttpSessionBindingListener à mes Beans en session et le code de valueUnbound(...) est lancé quand la session se termine.

  9. #9
    Rédacteur/Modérateur

    Inscrit en
    juin 2003
    Messages
    4 184
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 4 184
    Points : 4 815
    Points
    4 815

    Par défaut

    Citation Envoyé par orden Voir le message
    Question: Comment échaper au pièges des sessions qui expirent en JSF ?
    salut,

    peut tu preciser l'environnement technqiue.?
    je n'avais pas réussi à le faire fonctionner, avec myfaces 1.2.2, facelets 1.1.14 et richfaces 3.2.0.

    mercii

  10. #10
    Rédacteur/Modérateur

    Inscrit en
    juin 2003
    Messages
    4 184
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 4 184
    Points : 4 815
    Points
    4 815

    Par défaut

    Question : gestion de l'expiration de session ? (myfaces 1.2.2-facelets 1.1.14-richfaces 3.2-tomcat 5.5)

    Réponse

    JSF 1.2 génére l'exception ViewExpiredException lorsque la session expire, cette exception n'est pas gerer par JSF et ne peut pas etre attraper par le serveur tomcat ..

    la solution décrite par orden permet de dire au framework rendre compatible le restoreview entre 1.1 et 1.2, ce qui évite d'avoir l'exception.

    cette solution ne fonctionne pas pour l'environnement ci dessus..

    pour contourner le problème, il suffit d'implementer le PhaseListener de JSF:public class
    Code :
    1
    2
    3
    4
     
    BasePhaseListener implements PhaseListener {
     
    }
    redefinir la methode afterPhase

    Code :
    1
    2
    3
    4
    public void afterPhase(PhaseEvent e) {
     
    /** **/
    }
    - les phases qui nous interessent :RESTORE_VIEW et INVOKE_APPLICATION.

    - lorsque la session expire; le ViewHandler de JSF, ne fait pas le restoreView censé faire le buildView, ce qui donne pour les deux phases le viewRoot = null

    il suffit donc de faire:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    PhaseId phaseid = e.getPhaseId();
    FacesContext context = e.getFacesContext();
    HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
    if (phaseid == PhaseId.RESTORE_VIEW || phaseid == PhaseId.INVOKE_APPLICATION) {
     
     
    if (context.getViewRoot() == null) {
     
     
    try {
    response.sendRedirect("login.jsf"); // la vue peut etre definit dans un parametre du context web
    } catch (IOException e1) {
     
     
    }
    }

  11. #11
    Expert Confirmé Sénior
    Avatar de djo.mos
    Inscrit en
    octobre 2004
    Messages
    4 673
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 4 673
    Points : 7 849
    Points
    7 849

    Par défaut

    Reçu par MP:

    Citation Envoyé par davdou
    Bonjour,

    Juste un petit mail pour vous indiquer une autre astuce pour la page d'accueil de JSF.
    Si la page d'accueil est : index.jsf.
    Vous avez dans webcontent, un fichier index.jsp

    1) Modifier web.xml
    <welcome-file-list>
    <welcome-file>index.jsf</welcome-file>
    </welcome-file-list>

    2) Créer un fichier index.jsf avec un commentaire

    <%--
    Please DO NOT delete this file. This file is used
    to trick tomcat to detect index.jsf as the
    welcome file and will load index.jsp instead.
    --%>

    Astuce trouvé sur le forum sun.

    http://forum.java.sun.com/thread.jsp...sageID=4046082

    cordialement,
    [edit=djo.mos]
    Intégré [avec modifications: ce n'est pa slimité aux beans sessions]

  12. #12
    Rédacteur/Modérateur

    Inscrit en
    juin 2003
    Messages
    4 184
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 4 184
    Points : 4 815
    Points
    4 815

    Par défaut

    Question: Comment valider plusieurs champs d'un formulaire à la fois?

    Réponse:

    1-Ajouter un validator au dernier composant à valider:

    Code :
    1
    2
     
    <h:inputText id="last_input" value="#{bean.lastInput}" validator="#{bean.validate}" required="true"/>
    Ou ajouter au formulaire un champs input de type hidden, il doit etre placé après les autres champs à contrôler

    Code :
    1
    2
    3
     
    <h:inputHidden value="validate" id="validate" required="true" validator="#{bean.validate}"/>
    </h:form>
    dans le backing bean la fonction de validation :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void validate(FacesContext context, 
                              UIComponent toValidate,
                              Object value){
     
    //1. récupérer les valeurs à vérifier. voir ci-dessous
     
    boolean isValide; // true si les valeurs sont valides, false sinon
     
    if(!isValide){
    throw new ValidatorException(new FacesMessage("Veuillez vérifier les paramètres..."));
     
    }
    Pour récupérer la valeur des composants à l'intérieur de la fonction de validation.

    Pour le composant qui contient le validator:

    Code :
    String valueToValidate= (String) value;
    Pour les autres composants ou si le validator est dans un input hidden

    Code :
    1
    2
    3
     
    FacesContext context = FacesContext.getCurrentInstance();
    UIInput input =(UIInput)context.getViewRoot().findComponent("component_id");
    Ou en utilisant le binding du composant:


    Code :
    String inputValue= (String) inputBinding.getValue();
    pour afficher le message coté JSP:

    Code :
    1
    2
     
    <h:message for="validate" />

  13. #13
    Rédacteur/Modérateur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    juillet 2005
    Messages
    3 765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2005
    Messages : 3 765
    Points : 7 223
    Points
    7 223

    Par défaut

    J'avoue ne pas voir l'utilité du hidden...

    Avec ça :

    Code :
    1
    2
    3
    4
    5
    6
    <h:form id="form">
      <h:inputText value="#{bean.mail}"  />
      <h:inputText value="#{bean.login}"  />
      <h:inputText value="#{bean.password}"  />
      <h:commandButton action="#{bean.connect}"/>
    </h:form>
    et ça :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    public String connect() {
      if ((login == null) && (password == null)) {
        FacesContext.getCurrentInstance().addMessage(new FacesMessage("Vous devez saisir votre login et mot de passe pour continuer"));
        return null;
      }
      // Code à exécuter si tout est ok...
      return "regleDeNavigationARetourner";
    }
    ça marche très bien aussi...
    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

  14. #14
    Rédacteur/Modérateur

    Inscrit en
    juin 2003
    Messages
    4 184
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 4 184
    Points : 4 815
    Points
    4 815

    Par défaut

    Citation Envoyé par romaintaz Voir le message
    J'avoue ne pas voir l'utilité du hidden...
    l'utilité du hidden est de faire de la validation des champs avec JSF, ce que tu propose ne se réalise pas pendant la phase validation de JSF et je ne suis pas sur que tu puisses ajouter un message de validation..lors de la phase invoke application il n'est plus possible d'ajouter un message à la queue des mesasges JSF..
    c'est peu etre plus parlant d'ajouter un validator à l'input hidden, mon exemple est peu etre mal choisi..je l'ai modifié.

  15. #15
    Rédacteur/Modérateur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    juillet 2005
    Messages
    3 765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2005
    Messages : 3 765
    Points : 7 223
    Points
    7 223

    Par défaut

    Ah oui, ça change un peu là !
    En effet, si tu mets un validator sur ton hidden, là il y a un vrai intérêt !

    Cependant, ma méthode fonctionne également, mais il est vrai que les tests exécutés dans la méthode connect sont lancés après la phase de validation...
    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

  16. #16
    Membre confirmé Avatar de Jacobian
    Inscrit en
    février 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 425
    Points : 215
    Points
    215

    Par défaut

    merci Sniper37 pour le validation mais est ce que tu peut compléter on spécifions comment afficher les messages d'erreur depuis message.proprties .

    Code :
    1
    2
    message.setDetail("Veuillez saisir le login ou l'adresse mail");

  17. #17
    Rédacteur/Modérateur

    Inscrit en
    juin 2003
    Messages
    4 184
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 4 184
    Points : 4 815
    Points
    4 815

    Par défaut

    Question: Qu’est ce que c’est la view (vue )JSF ?

    Réponse:

    La vue représente l’arbre de composants JSF contenus dans la page JSP sa racine est <f :view/>
    La vue JSF est sauvegardé coté client ou serveur suivant la définition du paramètre javax.faces.STATE_SAVING_METHOD.

  18. #18
    Rédacteur/Modérateur

    Inscrit en
    juin 2003
    Messages
    4 184
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 4 184
    Points : 4 815
    Points
    4 815

    Par défaut

    Question: Comment définir la méthode de sauvegarde de la vue JSF ?

    Réponse:
    La méthode de sauvegarde de la vue JSF est déterminée par le paramètre du context javax.faces.STATE_SAVING_METHOD dont la valeur par défaut est server.
    on peut modifier cette valeur dans le fichier de configuration web.xml

    Code :
    1
    2
    3
    4
    5
     
    <context-param>
      <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
      <param-value>client/server</param-value>
     </context-param>
    La valeur de ce paramètre peut être client ou server

  19. #19
    Rédacteur/Modérateur

    Inscrit en
    juin 2003
    Messages
    4 184
    Détails du profil
    Informations forums :
    Inscription : juin 2003
    Messages : 4 184
    Points : 4 815
    Points
    4 815

    Par défaut

    Question: quelle est la différence entre les méthodes de sauvegarde de la vue JSF?

    Réponse:

    La sauvegarde de la vue JSF se fait coté client dans le navigateur web par le biais d’un champ input-text de type hidden.
    La méthode server enregistre la vue JSF dans la session http.

    la méthode client peut être utile lorsque l’utilisateur désactive les cookies, toutefois, cette méthode augmente le temps de réponse surtout dans le cas d’une mauvaise connexion, de plus, la présence des données sensibles sauvegardés dans les POJO dans le navigateur, rend cette méthode plus vulnérable à une attaque.

    La méthode server est plus gourmande en mémoire mais, elle minimise l’utilisation de la bande passante.

  20. #20
    Rédacteur/Modérateur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    juillet 2005
    Messages
    3 765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2005
    Messages : 3 765
    Points : 7 223
    Points
    7 223

    Par défaut

    Question :

    Comment récupérer un élément HTML généré par du JSF en utilisant du Javascript ?
    Pourquoi ne retrouvé-je pas mon élémént HTML par son ID dans ma page HTML ?
    (j'hésite à savoir laquelle de ces questions est la plus pertinente)

    Réponse :

    Les IDs des champs d'un formulaire sont préfixés par l'ID du formulaire.
    Plus généralement, tous les composants JSF dont un parent (direct ou non) implémente l'interface NamingContainer sont concernés (c'est essentiellement le cas pour le composant HtmlForm).

    Ainsi, si on prend le code suivant :

    Code :
    1
    2
    3
    <h:form id="monFormulaire" ...>
        <h:inputText id="monChamp" .../>
        ...
    le code HTML généré par JSF pour l'input text sera :

    Code :
    <input ... id="monFormulaire:monChamp">
    Pour récupérer ce champ en Javascript, il faut faire :

    Code :
    var obj = document.getElementById("monFormulaire:monChamp");
    Du côté Java, la méthode monInputText.getId() retournera "monChamp" - c'est-à-dire l'ID du composant - tandis que monInputText.getClientId(facesContext) retournera "monFormulaire:monChamp" - c'est-à-dire l'ID complet du composant, celui utilisé dans la page HTML.

    Edit pour être tout à fait complet


    Le composant formulaire dispose toutefois de l'attribut prependId qui permet de ne pas préfixer les composants enfants de ce formulaire avec l'ID de ce dernier, pour peu que la valeur soit à false. Ainsi, le code suivant :

    Code :
    1
    2
    3
    <h:form id="monFormulaire" prependId="false">
        <h:inputText id="monChamp" .../>
        ...
    générera un composant HTML input dont l'ID sera "monChamp".
    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •