2012-11-04 17 views
6

Czekam na przekazanie zmiennej serwletu, myVar, która jest przekazywana na stronę JSP i przekazuje ją do JavaScript. JavaScript jest zewnętrznym javascriptem, który jest zawarty na stronie JSP.Przekazywanie zmiennej serwletowej do javascript

Mam przycisk, który wywołuje funkcję JavaScript, ale nie mogę przekazać żadnej z zmiennych, które są przekazywane do strony JSP za pośrednictwem serwletu. Przycisk nie jest częścią formularza.

Próbowałem w funkcji w JavaScript zadzwonić:

var x = '<%=myVar%>'; 

I

var x = '${myVar}'; 

I

var x = '<%= (String)request.getParameter("myVar") %>'; 

jednak x jest zawsze ciągiem co ja wprowadzane .

Nie używam AJAX ani JQuery. Jakieś pomysły?

Przykładowy kod jest wersją uproszczoną: (w związku z tym przycisk jest tak naprawdę rozwijanym, który wywołuje js podczas zmiany wartości, jednak chcę, aby inne zmienne, które nie są częścią listy rozwijanej, zostały wywołane w changeCLass) boczna

serwletów:

request.setAttribute("otherVars","tests"); 

JP:

<script type="text/javascript" src="external.js"></script> 

<select name="vars" id="myVars" onchange="changeClass(this)"> 
<option value='1' selected="selected">1</option> 
</select> 

external.js włączone JSP:

function changeClass(newVarX) { 

    var newVarId =newVarX.value; 
    var tID = '${otherVars}'; 

    alert(newVarId + " " + tID); 
} 

wyjściowa: 1 $ (otherVars}

ale wyjście powinno być: 1 Testy

+0

jest ten kod pochodzi z pliku zewnętrznego? – rano

+0

@ user1798546 Prostym sposobem na zrobienie tego jest utworzenie ukrytego pola, które przechowuje wartość i przechodzenie od niej. Innym sposobem jest przekazanie zmiennej do funkcji js jako parametr '' –

+0

Byłby to lepiej wyjaśnić, jak aplikacja zachowuje się w atm (za pomocą przykładowego kodu), aby lepiej zrozumieć i zapewnić lepsze rozwiązanie. –

Odpowiedz

3

To nie działa, ponieważ plik JavaScript nie jest przetwarzany przez serwer. Możliwe rozwiązania:

  • Deklaracja globalna zmiennej tID w pliku JSP.

    JSP:

    <script type="text/javascript" src="external.js"></script> 
    <script type="text/javascript"> 
        var tID = '${otherVars}'; 
    </script> 
    
    <select name="vars" id="myVars" onchange="changeClass(this)"> 
        <option value='1' selected="selected">1</option> 
    </select> 
    

    JavaScript (external.js):

    function changeClass(newVarX) { 
        var newVarId = newVarX.value; 
        alert(newVarId + " " + tID); 
    } 
    
  • masz plik JavaScript być również przetwarzane. Można użyć pliku JSP dla JavaScript i zastosować odpowiedni rodzaj treści:

    JSP:

    <script type="text/javascript" src="external.jsp"></script> 
    
    <select name="vars" id="myVars" onchange="changeClass(this)"> 
        <option value='1' selected="selected">1</option> 
    </select> 
    

    JavaScript (zewnętrzne.JSP -> uwaga, że ​​jest to plik JSP, zbyt, ale typ zawartości jest ustawiony na text/javascript):

    <%@ page language="java" contentType="text/javascript; charset=UTF-8" pageEncoding="UTF-8"%> 
    function changeClass(newVarX) { 
        var newVarId = newVarX.value; 
        var tID = '${otherVars}'; 
        alert(newVarId + " " + tID); 
    } 
    
+0

Wystarczy edytować odpowiedź. W drugim rozwiązaniu plik JavaScript jest plikiem JSP, ale typem treści jest tekst/javascript. Spowoduje to, że serwer przetworzy plik, więc można użyć kodu Java. – Jan

Powiązane problemy