Précédent   Forum du club des développeurs et IT Pro > 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
keulkeul
Responsable Eclipse et JAVA

 
Avatar de keulkeul
 
Homme Mickael BARON
Ingénieur de Recherche
Inscription : juillet 2005
Messages : 3 973
Détails du profil
Informations personnelles :
Nom : Homme Mickael BARON
Localisation : France, Vienne (Poitou Charente)

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

Informations forums :
Inscription : juillet 2005
Messages : 3 973
Points : 18 981
Points : 18 981
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
keulkeul est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/01/2008, 16h33   #2
romaintaz
Rédacteur/Modérateur
 
Avatar de romaintaz
 
Homme Romain Linsolas
Java craftsman
Inscription : juillet 2005
Messages : 3 579
Détails du profil
Informations personnelles :
Nom : Homme Romain Linsolas
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Java craftsman
Secteur : Finance

Informations forums :
Inscription : juillet 2005
Messages : 3 579
Points : 6 722
Points : 6 722
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
romaintaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2008, 12h35   #3
Sniper37
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 184
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 184
Points : 4 411
Points : 4 411
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   #4
Sniper37
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 184
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 184
Points : 4 411
Points : 4 411
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   #5
Mediii
Nouveau Membre du Club
 
Inscription : septembre 2007
Messages : 79
Détails du profil
Informations personnelles :
Âge : 31
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   #6
Sniper37
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 184
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 184
Points : 4 411
Points : 4 411
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   #7
Sniper37
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 184
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 184
Points : 4 411
Points : 4 411
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   #8
orden
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   #9
Sniper37
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 184
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 184
Points : 4 411
Points : 4 411
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   #10
Sniper37
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 184
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 184
Points : 4 411
Points : 4 411
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   #11
djo.mos
Expert Confirmé Sénior
 
Avatar de djo.mos
 
Inscription : octobre 2004
Messages : 4 678
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 4 678
Points : 7 003
Points : 7 003
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   #12
Sniper37
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 184
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 184
Points : 4 411
Points : 4 411
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   #13
romaintaz
Rédacteur/Modérateur
 
Avatar de romaintaz
 
Homme Romain Linsolas
Java craftsman
Inscription : juillet 2005
Messages : 3 579
Détails du profil
Informations personnelles :
Nom : Homme Romain Linsolas
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Java craftsman
Secteur : Finance

Informations forums :
Inscription : juillet 2005
Messages : 3 579
Points : 6 722
Points : 6 722
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
romaintaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 16h58   #14
Sniper37
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 184
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 184
Points : 4 411
Points : 4 411
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   #15
romaintaz
Rédacteur/Modérateur
 
Avatar de romaintaz
 
Homme Romain Linsolas
Java craftsman
Inscription : juillet 2005
Messages : 3 579
Détails du profil
Informations personnelles :
Nom : Homme Romain Linsolas
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Java craftsman
Secteur : Finance

Informations forums :
Inscription : juillet 2005
Messages : 3 579
Points : 6 722
Points : 6 722
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
romaintaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2008, 14h13   #16
Jacobian
Membre actif
 
Avatar de Jacobian
 
Inscription : février 2008
Messages : 425
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 425
Points : 197
Points : 197
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   #17
Sniper37
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 184
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 184
Points : 4 411
Points : 4 411
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   #18
Sniper37
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 184
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 184
Points : 4 411
Points : 4 411
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   #19
Sniper37
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 184
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 184
Points : 4 411
Points : 4 411
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
Vieux 28/01/2009, 15h05   #20
romaintaz
Rédacteur/Modérateur
 
Avatar de romaintaz
 
Homme Romain Linsolas
Java craftsman
Inscription : juillet 2005
Messages : 3 579
Détails du profil
Informations personnelles :
Nom : Homme Romain Linsolas
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Java craftsman
Secteur : Finance

Informations forums :
Inscription : juillet 2005
Messages : 3 579
Points : 6 722
Points : 6 722
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
romaintaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h55.


 
 
 
 
Partenaires

Hébergement Web