JSP/JSTL/JAVA passage de parametres [Résolu]

cs_anri 9 Messages postés mardi 6 octobre 2009Date d'inscription 14 octobre 2009 Dernière intervention - 6 oct. 2009 à 09:11 - Dernière réponse : cs_anri 9 Messages postés mardi 6 octobre 2009Date d'inscription 14 octobre 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 6 oct. 2009 à 14:09
3
Merci
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

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Meilleure réponse
cs_anri 9 Messages postés mardi 6 octobre 2009Date d'inscription 14 octobre 2009 Dernière intervention - 6 oct. 2009 à 14:13
3
Merci
Ok.

Merci beaucoup de ton aide et à une prochaine fois.

Merci cs_anri 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_anri
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 6 oct. 2009 à 09:42
0
Merci
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
Commenter la réponse de cs_DARKSIDIOUS
cs_anri 9 Messages postés mardi 6 octobre 2009Date d'inscription 14 octobre 2009 Dernière intervention - 6 oct. 2009 à 09:51
0
Merci
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
Commenter la réponse de cs_anri
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 6 oct. 2009 à 09:56
0
Merci
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
Commenter la réponse de cs_DARKSIDIOUS
cs_anri 9 Messages postés mardi 6 octobre 2009Date d'inscription 14 octobre 2009 Dernière intervention - 6 oct. 2009 à 10:02
0
Merci
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
Commenter la réponse de cs_anri
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 6 oct. 2009 à 10:11
0
Merci
Salut,

Un petit tour dans la javadoc, et tu as ta réponse :
http://java.sun.com/products/servlet/2.2/javadoc/javax/servlet/jsp/tagext/TagSupport.html
> contient un membre pageContext >
http://java.sun.com/products/servlet/2.2/javadoc/javax/servlet/jsp/tagext/TagSupport.html
> contient un getSession >
http://java.sun.com/products/servlet/2.2/javadoc/javax/servlet/jsp/PageContext.html#getSession()

______________________________________
DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS
cs_anri 9 Messages postés mardi 6 octobre 2009Date d'inscription 14 octobre 2009 Dernière intervention - 6 oct. 2009 à 10:55
0
Merci
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} !
Commenter la réponse de cs_anri
cs_anri 9 Messages postés mardi 6 octobre 2009Date d'inscription 14 octobre 2009 Dernière intervention - 6 oct. 2009 à 13:38
0
Merci
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
Commenter la réponse de cs_anri
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 6 oct. 2009 à 13:43
0
Merci
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
Commenter la réponse de cs_DARKSIDIOUS
cs_anri 9 Messages postés mardi 6 octobre 2009Date d'inscription 14 octobre 2009 Dernière intervention - 6 oct. 2009 à 13:55
0
Merci
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 ?
Commenter la réponse de cs_anri

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.