2013-09-24 14 views
11

È possibile accedere a una variabile di tipo String definita in jsp da un javascript nella stessa pagina?Accesso alla variabile java da javascript sullo stesso jsp

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

in Eclipse sto ottenendo un errore

myVar cannot be resolved to a variable 
+1

dov'è la tua myVar definito? – kosa

+6

'I blocchi <%' e '<% =' vengono valutati nell'ordine in cui sono stati trovati nella pagina. Devi mettere quello che dichiara 'myVar' prima di quello che lo usa. – millimoose

+5

Sebbene, idealmente, non si utilizzi affatto scriptlet. – millimoose

risposta

21

Questo non funziona in quanto si sta cercando di usare una variabile non definita. Il codice è generato in questo modo:

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

Non ha senso, giusto? Così, al fine di rendere questo lavoro è necessario dichiarare la variabile prima di utilizzarla (come sempre):

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

Ancora, l'uso di scriptlet è estremamente scoraggiato. Supponendo che si sta utilizzando e JSTLExpression Language (EL), questo può essere riscritto per:

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

Se la variabile ha i caratteri come " dentro, allora questo approccio sarà Faile. Si può sfuggire il risultato utilizzando <c:out> da JSTL:

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

Maggiori informazioni:

+1

Non sto usando JSTL ... –

+2

@VgeShi Lo so, era una raccomandazione. –

+2

Cosa succede se myVar contiene "caratteri? Non c'è un modo sicuro per usarlo senza sfuggire questi caratteri manualmente? – DonkeyKong

Problemi correlati