2011-01-26 6 views

ответ

67
alert("${variable}"); 

или

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

или полный пример

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

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

</script> 
</head> 

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

</html> 

Примечание: санировать вход перед визуализацией, он может открыть целый много возможностей XSS

+3

Надеюсь, что пример заставит его работать сейчас :) –

+2

Также читайте эту статью, она очень четко излагает концепцию JS и JSP - http: //balusc.blogspot .in/2009/05/javajspjsf-and-javascript.html –

+1

@JigarJoshi: Я имею в виду не обиду, но я думаю, что ваш ответ действительно грязный/старая школа, я подозреваю, что в этой теме просто много невежества. Что вы думаете о моем ответе ниже? –

10

Предполагая вы говорите о Java Скрипт в HTML-документе.

Вы не можете сделать это напрямую, поскольку, насколько это касается JSP, он выводит текст, и, насколько это касается страницы, он просто получает HTML-документ.

Вы должны сгенерировать код JavaScript, чтобы создать экземпляр переменной, , чтобы избежать любых символов со специальным значением. в JS. Если вы просто сбрасываете данные (как предложено некоторыми другими ответами), вы обнаружите, что это падает, когда данные содержат новые строки, цитировать символы и т. Д.

Самый простой способ сделать это использовать библиотеку JSON (есть куча перечислены в нижней части http://json.org/) и затем выход JSP:

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

Это даст вам объект, который вам могут получить доступ:

myObject.someProperty 

в JS.

+1

вы можете предоставить jsFiddle, пожалуйста? Я очень грубо понимаю идею –

+0

Нет. JSFiddle не выполнит JSP. – Quentin

+1

достаточно справедливо, но не могли бы вы просто скопировать значение, которое будет выводить JSP? –

19

Чистейший путь, насколько я знаю:

  1. добавить переменную JSP для Data- HTML-элемента * атрибут
  2. затем прочитать это значение с помощью Javascript, когда требуется

Мои мнение относительно текущих решений на этой странице SO: чтение «непосредственно» значений JSP с использованием java-скрипта внутри фактического кода javascript, вероятно, является самой отвратительной вещью, которую вы могли бы сделать. Заставляет меня хотеть блевать. ха-ха. Серьезно, постарайтесь не делать этого.

HTML-часть без JSP:

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

HTML-часть при использовании JSP:

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

Javascript часть (с помощью JQuery для простоты):

<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> 

И здесь это jsFiddle, чтобы увидеть это в действии http://jsfiddle.net/6wEYw/2/

Ресурсы:

+0

Этот метод хорошо работает с объектом Model, являющимся базовой строкой, однако, если это значение JSON, все двойные кавычки в JSON должны быть экранированы, что является проблематичным. –

+0

@JamieBurke справедливо, я никогда не пытался использовать его для хранения значений JSON. Может быть общее решение этой конкретной проблемы, это потребует расследования. –

+0

Мне сложно понять, почему однострочное решение заставляет вас «хотеть поцеловать», в то время как этот запутанный беспорядок как-то не делает этого. Позаботьтесь, чтобы просветить меня? Есть ли какой-то крайный вопрос, который я не рассматриваю? – katzenhut

0

Прежде всего java-скрипт - это язык сценариев на стороне клиента, в то время как jsp - это язык на стороне сервера, который вы не можете получить, обрабатывать любую переменную на стороне клиента на стороне сервера без отправки запроса на сервер только после получения запроса на сервере вы можете получить доступ к клиентской стороне языковые переменные так есть только путь через запрос

другое дело, что «Как отправить эти переменные на сервер» есть два вариант ... Либо использовать скрытое поле или объект пользователя window.location от 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");%> 

, то вы можете получить доступ к данным на стороне клиента по адресу jsp

+1

OP хочет прочитать JSP (серверную) переменную от JS, а не наоборот. – Suma

Смежные вопросы