web-dev-qa-db-fra.com

Lecture d'une variable JSP à partir de JavaScript

Comment lire/accéder à une variable JSP à partir de JavaScript?

55
Siddiqui
alert("${variable}");

ou

alert("<%=var%>");

ou plein exemple

<html> 
<head>
<script language="javascript"> 

function access(){ 
  <% String str="Hello World"; %>
   var s="<%=str%>"; 
   alert(s); 
} 

</script> 
</head> 

<body onload="access()"> 
</body> 

</html>

Remarque: désinfectez l'entrée avant de la restituer, cela pourrait ouvrir de nombreuses possibilités XSS 

73
Jigar Joshi

Le moyen le plus propre, à ma connaissance:

  1. ajoutez votre variable JSP à l'attribut data- * d'un élément HTML
  2. puis lisez cette valeur via Javascript si nécessaire

Mon opinion concernant les solutions actuelles sur cette page SO: lire les valeurs JSP "directement" à l'aide de Java scriplet dans le code JavaScript réel est probablement la chose la plus dégoûtante que vous puissiez faire. Ça me donne envie de vomir. haha. Sérieusement, essayez de ne pas le faire.

La partie HTML sans JSP:

<body data-customvalueone="1st Interpreted Jsp Value" data-customvaluetwo="another Interpreted Jsp Value">
    Here is your regular page main content
</body>

La partie HTML lors de l'utilisation de JSP:

<body data-customvalueone="${beanName.attrName}" data-customvaluetwo="${beanName.scndAttrName}">
    Here is your regular page main content
</body>

La partie javascript (en utilisant jQuery pour plus de simplicité):

<script type="text/JavaScript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.js"></script>
<script type="text/javascript">
    jQuery(function(){
        var valuePassedFromJSP = $("body").attr("data-customvalueone");
        var anotherValuePassedFromJSP = $("body").attr("data-customvaluetwo");

        alert(valuePassedFromJSP + " and " + anotherValuePassedFromJSP + " are the values passed from your JSP page");
});
</script>

Et voici le jsFiddle pour voir cela en action http://jsfiddle.net/6wEYw/2/

Ressources:

22
Adrien Be

En supposant que vous parlez de JavaScript dans un document HTML.

Vous ne pouvez pas le faire directement car, en ce qui concerne JSP, il génère du texte et, en ce qui concerne la page, il ne s'agit que d'obtenir un document HTML.

Vous devez générer du code JavaScript pour instancier la variable, en prenant soin d'échapper à tous les caractères ayant une signification spéciale dans JS. Si vous ne faites que vider les données (comme proposé par d'autres réponses), vous constaterez qu'elles tombent lorsque les données contiennent de nouvelles lignes, des guillemets, etc.

La méthode la plus simple consiste à utiliser une bibliothèque JSON (un groupe est répertorié au bas de http://json.org/ ) et d’obtenir la sortie JSP:

<script type="text/javascript">
    var myObject = <%= the string output by the JSON library %>;
</script>

Cela vous donnera un objet auquel vous pouvez accéder comme:

myObject.someProperty

dans le JS.

12
Quentin
   <% String s="Hi"; %>
   var v ="<%=s%>"; 
6
user467871

Tout d'abord, le script Java est un langage de script côté client tandis que jsp est un langage côté serveur auquel vous ne pouvez pas accéder, traitez toutes les variables de la langue côté client côté serveur sans envoyer de requête au serveur. Variables linguistiques secondaires. Il n’ya donc qu’un moyen de passer par la requête

une autre chose est que "Comment envoyer ces variables au serveur" Il y a deux options ... Soit utiliser un champ caché Ou un objet window.location de js ......

`window.location.replace("home.jsp?nm="+v);`
`<%String name=request.getParameter("nm");%>`

window.location.href("home.jsp?nm="+v);
<%String name=request.getParameter("v");%>

alors vous êtes en mesure d'accéder aux données côté client à jsp

0