Accéder aux variables Java / Servlet / JSP / JSTL / EL en JavaScript
j'ai un formulaire en JSP. Je dois le remplir en fonction de l'objet request (du servlet). Comment puis-je utiliser le Script Java pour accéder aux attributs request object ou si vous pouvez me suggérer une autre meilleure façon de remplir le formulaire dynamiquement?
3 réponses
vous devez réaliser que Java/JSP est simplement un producteur de code HTML/CSS/JS. Donc tout ce que vous avez à faire est de laisser JSP Imprimer la variable Java comme si c'était une variable JavaScript et que la sortie de code HTML/JS générée est valide syntaxiquement.
pourvu que la variable Java soit disponible dans la portée EL par ${foo}
, voici plusieurs exemples pour l'imprimer:
<script>var foo = '${foo}';</script>
<script>someFunction('${foo}');</script>
<div onclick="someFunction('${foo}')">...</div>
Imaginez que le La variable Java a la valeur "bar"
, alors JSP va finalement générer ce HTML que vous pouvez vérifier par rightclick, View Source dans le webbrowser:
<script>var foo = 'bar';</script>
<script>someFunction('bar');</script>
<div onclick="someFunction('bar')">...</div>
remarque que les singlequotes sont donc obligatoires pour représenter une chaîne de caractères tapés variable en JS. Si vous avez utilisé var foo = ${foo};
à la place, alors il imprimerait var foo = bar;
, qui peut se retrouver dans des erreurs "bar is undefined" dans quand vous essayez d'y accéder en bas dans le code JS (vous pouvez voir des erreurs JS dans la console JS de l'ensemble d'outils de développement web du navigateur que vous pouvez ouvrir en appuyant sur F12 dans Chrome/FireFox23+/IE9+). Notez aussi que si la variable représente un nombre ou un booléen, qui n'a pas besoin d'être cité, alors elle fonctionnera très bien.
si la variable provient d'une entrée contrôlée par l'utilisateur, alors gardez à l'esprit de prendre en compte XSS attack holes et JS échapper . Près du bas de notre page el wiki vous pouvez trouver un exemple pour créer une fonction el personnalisée qui échappe à une variable Java pour une utilisation sûre dans JS.
si la variable est un peu plus complexe, par exemple une fève Java, ou une liste de celle-ci, ou une carte, alors vous pouvez utiliser l'une des nombreuses bibliothèques JSON disponibles pour convertir l'objet Java en une chaîne JSON. Voici un exemple de Gson.
String someObjectAsJson = new Gson().toJson(someObject);
notez que de cette façon vous n'avez plus besoin de l'imprimer en tant que chaîne Citée.
<script>var foo = ${someObjectAsJson};</script>
voir aussi:
si vous pré-peuplez les champs de formulaires basés sur les paramètres de la requête HTTP, alors pourquoi ne pas simplement le faire du côté du serveur dans votre JSP... plutôt que du côté client avec JavaScript? Dans le JSP, cela ressemblerait vaguement à ceci:
<input type="text" name="myFormField1" value="<%= request.getParameter("value1"); %>"/>
côté client, JavaScript n'a pas vraiment le concept de"request object". Vous devez analyser la chaîne de requête, vous-même manuellement pour obtenir les paramètres CGI. Je soupçonne que ce n'est pas ce que vous êtes réellement désireux de le faire.
Dans la page JSP :
<c:set var="list_size" value="${list1.size() }"></c:set>
accéder à cette valeur dans la page Javascipt en utilisant:
var list_size = parseInt($('#list_size').val());
j'ai ajouté la page javascript dans mon projet à l'extérieur.