accéder à des variables de session dans le code javascript à l'intérieur de jsp
J'ai besoin de fournir des données pour google Api table... donc je vais l'envoyer à partir de servlet pour JSP
mais comment puis-je accéder à ces données dans "googles" javascript?
Je vais fournir des échantillons d'un autre JS - très simple - il suffit de me laisser apprendre à faire de ce que le sujet dit
<script>
function showTable()
{
<%
Object obj = session.getAttribute("list");
List<String> list = new ArrayList<String>();
int size = 0;
if (obj != null) {
list = (ArrayList<String>) obj;
size = (Integer) session.getAttribute("size");
}
for (int i = 0 ; i < size ; i++) {
String value = list.get(i);
%>
alert('<%= i %> = <%= value %> ');
<%
}
%>
}
</script>
Il a pour imprimer les éléments de la liste donnée... mais maintenant c'est juste un gros scriplet avec d'alerte à l'intérieur de celui-ci... pour refactoriser le code? Je n'aime pas avoir trop de java dans les pages Jsp, parce que la servlet est l'endroit où il doit être placé
EDIT: juste pour résumer, je préfère "normal" JS pour boucle ici... en Général, je préfère minimiser le code java, et de maximiser la JS
OriginalL'auteur dantuch | 2011-08-30
Vous devez vous connecter pour publier un commentaire.
Convertir JSON dans
doGet()
d'un prétraitement de la servlet. Vous pouvez utiliser entre autres Google Gson pour cela. En supposant que vous avez unList<Person>
:(note que j'en ai fait un attribut de la demande au lieu de l'attribut de session, vous êtes libre de le modifier, mais je crois qu'il n'a pas nécessairement besoin d'être un attribut de session car il ne représente pas sessionwide de données)
L'affecter à une variable JS dans la page JSP, comme suit:
De cette façon, il est disponible comme un fullworthy JS objet. Vous pourrait nourrir directement à l'API de Google.
Maintenant appeler l'URL de la servlet au lieu de la JSP. Par exemple, quand il est mappé sur un modèle d'URL de
/persons
, l'appeler par http://localhost:8080/contextname/persons.Vous êtes les bienvenus.
Mais btw. J'ai découvert, que j'ai passé des objets de la Liste pour demander au lieu de jsonarray, et il a bien fonctionné. Alors, quel est l'avantage de l'utilisation de json? C'est seulement pour échapper les caractères spéciaux?
Il fonctionne en effet lorsque vous utilisez
List<String>
. LeList#toString()
a la une coïncidence qu'elle correspond à la JS syntaxe de tableau. Mais vous ne devriez pas compter sur elle. Certainement pas quand vous avez unList<SomeComplexObject>
dont chaque élément est représenté parSomeComplexObject#toString()
. Et oui, le format JSON est aussi beaucoup plus solide quand il s'agit de la manipulation des caractères spéciaux.Il était digne de moi parce que je ne pouvais pas accéder SessionScope variables en raison de elle est des objets java. Avec Gson, maintenant, je suis en mesure de la traiter.
OriginalL'auteur BalusC
JavaScript est exécuté côté client, et les scriptlets, EL, et de balises JSP à côté serveur. Du point de vue du code côté serveur, JavaScript est juste le texte généré, tout comme le balisage HTML.
Donc, si vous voulez avoir une boucle JavaScript qui passe en boucle sur un tableau JavaScript dans la page HTML générée, vous avez besoin de générer le code JavaScript qui initialise le tableau, et la boucle JavaScript.
Voici le code JSP
Ce code JSP génère le code JavaScript suivant, en supposant que la liste de l'attribut de session contient "la banane", "apple" et "orange":
Assurez-vous toutefois, afin d'échapper correctement les valeurs de la liste, afin de générer du JavaScript valide code. Par exemple, si l'une des valeurs a été
"I'm cool"
, le JavaScript généré seraitqui n'est plus valable. Utilisation commons-lang StringEscapeUtils.escapeEcmaScript pour échapper à l'valeurs.
merci pour cette remarque utile. J'ai testé sur Firefox, et il ne contient que les 3 fruits. Sur IE, si, il contient les 3 fruits + indéfini. De toute façon, je voulais juste montrer l'idée de générer un tableau JavaScript. Je vais le corriger pour éviter la dernière virgule.
error: missing = in XML attribute var theArray = [<c:forEach items="[1, 2222, 3333]" var="item" varStatus="loopStatus">'' <c:if true>, </c:if></c:forEach>];
quel est le problème avec elle et je peux résoudre ce problème? Liste créée par: ` List<String> liste = new ArrayList<String>(); liste.add("1"); liste.add("2222"); liste.add("3333"); session.setAttribute("liste", liste);`Voir stackoverflow.com/tags/jsp/info pour savoir comment utiliser la JSTL.
Merci pour votre aide.
OriginalL'auteur JB Nizet
depuis la liste de tableaux est d'avoir des objets de Chaînes, vous pouvez simplement utiliser la méthode split() sur la valeur de la liste de tableau. Quelque chose comme ci-dessous;
//split the contents
var splitContent = jsList.split(","); //an array of element
}
J'espère que cela va vous aider à les résoudre.
OriginalL'auteur Naved