|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
![]() ![]() ![]() Mickael BARONIngénieur de Recherche Inscription : juillet 2005 Messages : 3 973 ![]() |
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 |
|
10
|
|
|
#2 | ||||||||||
![]() ![]() Romain LinsolasJava craftsman Inscription : juillet 2005 Messages : 3 579 ![]() |
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 :
Code :
Code :
En écrivant : Code :
Code :
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 |
||||||||||
|
00
|
|
|
#3 | ||||
![]() ![]() Inscription : juin 2003 Messages : 4 184 ![]() |
Question: Comment désactiver le cache du browser coté serveur ?
Réponse: - Implementer le phase listner: Code :
Code :
|
||||
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : juin 2003 Messages : 4 184 ![]() |
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()); Intégré [avec modifications: ce n'est pa slimité aux beans sessions] |
|
|
10
|
|
|
#5 | ||||||||
|
Nouveau Membre du Club
![]() Inscription : septembre 2007 Messages : 79 ![]() |
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 :
Il faut définir le Phase Listener qui va charger/contrôler les url Code :
Code :
Code :
|
||||||||
|
|
00
|
|
|
#6 | ||||
![]() ![]() Inscription : juin 2003 Messages : 4 184 ![]() |
Question: comment invalider la session d'un user ?
Réponse: Code :
Code :
Intégré |
||||
|
|
00
|
|
|
#7 | ||
![]() ![]() Inscription : juin 2003 Messages : 4 184 ![]() |
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 :
à suivre.. |
||
|
|
00
|
|
|
#8 | ||||
|
Invité régulier
![]() Inscription : octobre 2006 Messages : 9 ![]() |
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 :
Code :
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. |
||||
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : juin 2003 Messages : 4 184 ![]() |
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 |
|
|
00
|
|
|
#10 | ||||||
![]() ![]() Inscription : juin 2003 Messages : 4 184 ![]() |
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 :
Code :
- 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 :
|
||||||
|
|
00
|
|
|
#11 | |
|
Expert Confirmé Sénior
![]() ![]() Inscription : octobre 2004 Messages : 4 678 ![]() |
Reçu par MP:
Citation:
Intégré [avec modifications: ce n'est pa slimité aux beans sessions] |
|
|
|
00
|
|
|
#12 | ||||||||
![]() ![]() Inscription : juin 2003 Messages : 4 184 ![]() |
Question: Comment valider plusieurs champs d'un formulaire à la fois?
Réponse: 1-Ajouter un validator au dernier composant à valider: Code :
Code :
Code :
Pour le composant qui contient le validator: Code :
String valueToValidate= (String) value; Code :
Code :
String inputValue= (String) inputBinding.getValue(); |
||||||||
|
|
00
|
|
|
#13 | ||||
![]() ![]() Romain LinsolasJava craftsman Inscription : juillet 2005 Messages : 3 579 ![]() |
J'avoue ne pas voir l'utilité du hidden...
Avec ça : Code :
Code :
__________________
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 |
||||
|
00
|
|
|
#14 |
![]() ![]() Inscription : juin 2003 Messages : 4 184 ![]() |
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é. |
|
|
00
|
|
|
#15 |
![]() ![]() Romain LinsolasJava craftsman Inscription : juillet 2005 Messages : 3 579 ![]() |
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 |
|
00
|
|
|
#16 | ||
|
Membre actif
![]() Inscription : février 2008 Messages : 425 ![]() |
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 :
|
||
|
00
|
|
|
#17 |
![]() ![]() Inscription : juin 2003 Messages : 4 184 ![]() |
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. |
|
|
00
|
|
|
#18 | ||
![]() ![]() Inscription : juin 2003 Messages : 4 184 ![]() |
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 :
|
||
|
|
00
|
|
|
#19 |
![]() ![]() Inscription : juin 2003 Messages : 4 184 ![]() |
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. |
|
|
00
|
|
|
#20 | ||||
![]() ![]() Romain LinsolasJava craftsman Inscription : juillet 2005 Messages : 3 579 ![]() |
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 :
Code :
<input ... id="monFormulaire:monChamp"> Code :
var obj = document.getElementById("monFormulaire:monChamp"); 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 :
__________________
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 |
||||
|
00
|
Copyright © 2000-2013 - www.developpez.com