JSP/JSTL/JAVA passage de parametres

Résolu
cs_anri Messages postés 9 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 14 octobre 2009 - 6 oct. 2009 à 09:11
cs_anri Messages postés 9 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 14 octobre 2009 - 6 oct. 2009 à 14:13
Bonjour.
JE récupère dans une JSP un UserName (via un formulaire) que je mets dans une variable.
J'aimerai envoyer cette variable à une classe Java.
Je n'y arrive pas.
Voici les différents scripts
Classe Java
package com.pikeo.back.modules.picture;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class ProfileTag extends TagSupport {
private int userName;

public void setUserName(int n) {
this.userName = n;
}

public int doStartTag() throws JspException {

try {


pageContext.getOut().print("script java : " + userName);

} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
}

TAGLIB
<?xml version="1.0"?>
<!DOCTYPE taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd">
<!-- by HG -->
<taglib>
<tlib-version>1</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>Profile Tag Library</short-name>
<tag>
<name>profile</name>
<tag-class>com.pikeo.back.modules.picture.ProfileTag</tag-class>
jsp

<name>userName</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>string</type>

empty
</tag>
</taglib>


JSP
<?xml version ="1.0"?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:tag="urn:jsptld:/WEB-INF/taglib/Taglib.tld" version="1.2">

<!-- GH -->

<jsp:directive.page contentType="text/html" />

<html>

<form method="post" action="ProfileTest.jsp">
User name :

</form>
<c:set scope ="session" var="user" value="${param.userName}" />
<c:out value="user : ${user}" />




<tag:profile userName="${user}"></tag:profile>


</html>
</jsp:root>



Merci de votre aide

11 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 oct. 2009 à 14:09
Salut,

C'est juste récupèrer le nom user à partir de la valeur ${user} contenu dans l'attribut username de ton tag
______________________________________
DarK Sidious
3
cs_anri Messages postés 9 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 14 octobre 2009
6 oct. 2009 à 14:13
Ok.

Merci beaucoup de ton aide et à une prochaine fois.
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 oct. 2009 à 09:42
Salut,

Je ne sais pas trop ce que tu cherche à faire, mais je pense que c'est un problème de compréhension du fonctionnement d'une jsp :

Une jsp est interprêtée et compilée en une classe java au niveau du serveur, AVANT d'envoyer le contenu HTML résultant de l'exécution de cette classe java au navigateur Web.

Donc, tu ne peux pas savoir le nom de l'utilisateur AVANT qu'il ne l'ai saisi...

Il n'y a pas d'interraction possible entre les action javascripts niveau client et les classes java niveau serveur. Il faut forcément que tu envoi une requête au serveur pour lui notifier de ce qu'à saisit l'utilisateur afin de remplir la classe que tu veux (ici en plus, il s'agit d'un tagLib apparement, tu auras alors encore plus de mal à renseigner la propriété userName vu qu'un taglib n'est pas lié à une session et est GLOBAL à toutes ton application, et donc, à tout les utilisateurs !)

Bref, je te conseille vivement de lire un tutorial sur J2EE et les interractions client-serveurs dans la programmation web avant de te lancer dans un tel développement car là tu va droit dans le mur... Et tu verras que c'est loin d'être aussi simple que ce que tu as pu imaginer en faisant un tagLib qui stocke un username comme cà...
______________________________________
DarK Sidious
0
cs_anri Messages postés 9 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 14 octobre 2009
6 oct. 2009 à 09:51
Merci de ta réponse.
J'avais compris en gros ce que tu m'indiques sur le fonctionnement d'une JSP.

En fait, le formulaire javascript n'est là que pour recueillir une entrée utilisateur : le userName.

Cette valeur est stockée dans une variable jstl/core : <c:set scope="session" var="user" value="${param.userName}" />
Je m'assure que la variable "user" a bien ete initialisée : <c:out value="user : ${user}" /> (Ca fonctionne).

En fait ce qui ne fonctionne pas, c'est lorsque j'essaie d'instancier la classe java en lui passant la variable "user" comme ceci :
<tag:profile userName="${user}"></tag:profile>

Si par contre je lui envoie une valeur comme cela : <tag:profile userName="toto"></tag:profile>, cela fonctionne !

???
Merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 oct. 2009 à 09:56
Salut,

Ok je vois ce que tu veux dire maintenant.

En fait, le problème vient sûrement (je pense) de la valeur que tu lui passes : si tu mets un point d'arrêt dans ton TagLib, tu dois obtenir en valeur du paramètre userName ${user} et non la valeur du user. C'est à toi de récupèrer la valeur de la variable user dans ta session HTTP : la jsp ne doit pas interprêter le ${user} pour le remplacer par la valeur qu'il contient je pense.
______________________________________
DarK Sidious
0
cs_anri Messages postés 9 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 14 octobre 2009
6 oct. 2009 à 10:02
Je vois ce que tu veux dire.
Les doubles quotes empêchent l'interprétation de la variable ${user}.

Par contre je ne vois pas comment récupérer la valeur de la variable dans la Session Http;

Peux-tu m'indiquer la façon d'y arriver ?

Merci d'avance
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 oct. 2009 à 10:11
0
cs_anri Messages postés 9 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 14 octobre 2009
6 oct. 2009 à 10:55
Je crois que j'ai compris ton idée. Récupérer dans l'objet java le contenu de la session.

J'ai écris :pageContext.getOut().print(pageContext.getSession().getAttributeNames()); dans le script java et voila ce que j'obtiens

org.apache.catalina.session.StandardSessionFacade@d83c8f

alors que j'aimerais recuperer le contenu de la variable ${user} !
0
cs_anri Messages postés 9 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 14 octobre 2009
6 oct. 2009 à 13:38
Tu as une solution ?
J'ai essayé dans tous les sens de récupérer dans le script JAVA la valeur de la variable intialisée dans le JSP main n'y arrive pas.

Suis allée dans la doc que tu m'as proposée et récupère la session ou le nom de la JSP "pageContext.getOut().print( pageContext.getPage());"

Merci d'avance
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 oct. 2009 à 13:43
Salut,

Ton code t'affiche l'adresse mémoire, logique !

Il te faut récupèrer la valeur de ta variable et non toutes la liste des attributs de session, ca doit donner un truc du genre :
pageContext.getOut().print(pageContext.getSession().getAttribute("user").toString());

Je te laisse récupèrer dynamiquement le nom de l'attribut (user) à partir de la valeur de l'attribut du tag.
______________________________________
DarK Sidious
0
cs_anri Messages postés 9 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 14 octobre 2009
6 oct. 2009 à 13:55
Génial, ça fonctionne.

Qu'est-ce que tu appelles "récupèrer dynamiquement le nom de l'attribut (user) à partir de la valeur de l'attribut du tag".

En fait je me sers de la valeur de userName pour rechercher dynamiquement le profil d'un utilisateur, profil que je sauvegarderai dans le contexte par la phrase "pageContext.setAttribute(var,valeur);"

Ca devrait fonctionner, non ?
0
Rejoignez-nous