2013-09-24 9 views
11

Czy jest możliwy dostęp do zmiennej typu String zdefiniowanej w jsp z javascript na tej samej stronie?Uzyskiwanie dostępu do zmiennej java z javascript na tym samym jP

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1255"> 
<title>Insert title here</title> 
<script type="text/javascript"> 
foo(); 
function foo() 
{ 
var value = "<%=myVar%>"; 
alert(value); 
} 
</script> 
</head> 
<body> 

<% 

String myVar="blabla"; 
%> 

</body> 

</html> 

w Eclipse otrzymuję błąd

myVar cannot be resolved to a variable 
+1

Gdzie jest Twój myVar zdefiniowane? – kosa

+6

Bloki '<%' i '<% =' są obliczane w kolejności, w jakiej zostały znalezione na stronie. Musisz umieścić ten, który deklaruje 'myVar' przed tym, który go używa. – millimoose

+5

Chociaż, najlepiej, nie używałbyś skryptletów w ogóle. – millimoose

Odpowiedz

21

to nie będzie działać, ponieważ próbujesz użyć zmiennej niezdefiniowanej. Kod jest generowany w następujący sposób:

... = myVar; 
//... 
String myVar = "blabla"; 

Nie ma sensu, prawda? Tak więc, aby uczynić tę pracę należy zadeklarować zmienną przed jej użyciem (jak zawsze):

<% 
    String myVar="blabla"; 
%> 
<script type="text/javascript"> 
    foo(); 
    function foo() { 
     var value = "<%=myVar%>"; 
     alert(value); 
    } 
</script> 

Mimo wykorzystania skryptletów jest bardzo zniechęcony. Zakładając, że używasz JSTL i Expression Language (EL), to może być zapisane do:

<c:set name="myVar" value="blabla" /> 
<script type="text/javascript"> 
    foo(); 
    function foo() { 
     var value = "${myVar}"; 
     alert(value); 
    } 
</script> 

Jeśli zmienna ma znaki jak " wewnątrz, to podejście Faile. można uciec wynik przy użyciu <c:out> z JSTL:

var value = "<c:out value='${myVar}' />"; 

Więcej informacji:

+1

Nie używam JSTL ... –

+2

@VgeShi Wiem, że to była rekomendacja. –

+2

co jeśli myVar zawiera "znaki? Czy nie istnieje bezpieczny sposób użycia go bez uciekania takich znaków ręcznie? – DonkeyKong

Powiązane problemy