Précédent   Forum des professionnels en informatique > Java > Développement Web en Java > Frameworks > JSF
JSF Forum d'entraide sur JSF (Java Server Faces). Avant de poster -> La FAQ JSF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 19/11/2006, 20h01   #1
Rédacteur/Modérateur
 
Inscription : octobre 2003
Messages : 7 967
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 7 967
Points : 12 460
Points : 12 460
Par défaut Participez à la création d'une FAQ JSF

Bonjour,

Ce sujet sert à recenser les sujets récurrents du forum JSF destinés à alimenter la future FAQ JSF.

Vous pouvez poster à la suite les liens vers les sujets en question et si possible formaliser la Q/R à la suite. Lorsque nous aurons une quantité suffisante de Q/R nous essaierons d'en dégager une classification.

Vous pouvez également poster librement vos propositions de Q/R.

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

N.B.: Il faudrait se limiter aux jeux de composants standards (html et core) et éviter les autres jeux de composants comme Tomahawk, Richfaces, etc.

Quelques FAQs JSF en anglais :
http://wiki.java.net/bin/view/Projec...erFacesSpecFaq
http://jsfcentral.com/faq/

à tous
Ricky81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 13h44   #2
Expert Confirmé Sénior
 
Avatar de djo.mos
 
Inscription : octobre 2004
Messages : 4 668
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 4 668
Points : 5 625
Points : 5 625
Bonjour,
Les Q/R précédemment proposées par nos membres ont été intégrées.

Thèmes qui manquent encore:
  • Présenter le composant dataTable
  • Présenter les ActionListeners
  • Présenter les phases d'une requête JSF.
  • Création d'un composant personnalisé à moins que ce ne soit trop long pour une Q/R.

pour votre participation.
__________________
Mon Blog | Mes Cours | Moi sur twitter
djo.mos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 16h33   #3
Rédacteur/Modérateur
 
Avatar de romaintaz
 
Homme Romain Linsolas
Java craftsman
Inscription : juillet 2005
Messages : 3 429
Détails du profil
Informations personnelles :
Nom : Homme Romain Linsolas
Âge : 33
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Java craftsman
Secteur : Finance

Informations forums :
Inscription : juillet 2005
Messages : 3 429
Points : 5 417
Points : 5 417
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 !
--------------------------------------------------------------
Mes liens : Blog | Page DVP | Suivez-moi sur Twitter
Mes articles : Hudson | Sonar | Outils de builds Java Maven 3 | TeamCity| CitConf 2009
Mes critiques : Apache Maven
romaintaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2008, 12h35   #4
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
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>
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2008, 17h36   #5
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
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]
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/04/2008, 19h32   #6
Nouveau Membre du Club
 
Inscription : septembre 2007
Messages : 79
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : septembre 2007
Messages : 79
Points : 35
Points : 35
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>
Mediii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2008, 17h38   #7
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
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é
__________________
Articles: Richfaces - JBosstools pour JSF.
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2008, 17h48   #8
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
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..
__________________
Articles: Richfaces - JBosstools pour JSF.
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2008, 21h48   #9
Invité régulier
 
Inscription : octobre 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 9
Points : 9
Points : 9
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.
orden est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2008, 10h43   #10
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
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
__________________
Articles: Richfaces - JBosstools pour JSF.
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2008, 12h39   #11
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
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) {
 
 
}
}
__________________
Articles: Richfaces - JBosstools pour JSF.
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2008, 15h04   #12
Expert Confirmé Sénior
 
Avatar de djo.mos
 
Inscription : octobre 2004
Messages : 4 668
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 4 668
Points : 5 625
Points : 5 625
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]
__________________
Mon Blog | Mes Cours | Moi sur twitter
djo.mos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 14h49   #13
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
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" />
__________________
Articles: Richfaces - JBosstools pour JSF.
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 15h56   #14
Rédacteur/Modérateur
 
Avatar de romaintaz
 
Homme Romain Linsolas
Java craftsman
Inscription : juillet 2005
Messages : 3 429
Détails du profil
Informations personnelles :
Nom : Homme Romain Linsolas
Âge : 33
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Java craftsman
Secteur : Finance

Informations forums :
Inscription : juillet 2005
Messages : 3 429
Points : 5 417
Points : 5 417
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 !
--------------------------------------------------------------
Mes liens : Blog | Page DVP | Suivez-moi sur Twitter
Mes articles : Hudson | Sonar | Outils de builds Java Maven 3 | TeamCity| CitConf 2009
Mes critiques : Apache Maven
romaintaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 16h58   #15
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
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é.
__________________
Articles: Richfaces - JBosstools pour JSF.
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2008, 07h59   #16
Rédacteur/Modérateur
 
Avatar de romaintaz
 
Homme Romain Linsolas
Java craftsman
Inscription : juillet 2005
Messages : 3 429
Détails du profil
Informations personnelles :
Nom : Homme Romain Linsolas
Âge : 33
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Java craftsman
Secteur : Finance

Informations forums :
Inscription : juillet 2005
Messages : 3 429
Points : 5 417
Points : 5 417
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 !
--------------------------------------------------------------
Mes liens : Blog | Page DVP | Suivez-moi sur Twitter
Mes articles : Hudson | Sonar | Outils de builds Java Maven 3 | TeamCity| CitConf 2009
Mes critiques : Apache Maven
romaintaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2008, 14h13   #17
Membre actif
 
Avatar de Jacobian
 
Inscription : février 2008
Messages : 394
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 394
Points : 161
Points : 161
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");
Jacobian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 11h43   #18
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
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.
__________________
Articles: Richfaces - JBosstools pour JSF.
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 11h45   #19
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
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
__________________
Articles: Richfaces - JBosstools pour JSF.
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2008, 11h51   #20
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
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.
__________________
Articles: Richfaces - JBosstools pour JSF.
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h41.


 
 
 
 
Partenaires

Hébergement Web