2012-11-04 9 views
6

Bir JSP sayfasına aktarılan bir uygulama değişkeni, myVar geçirip JavaScript'e aktarıyorum. JavaScript, JSP sayfasına dahil edilen harici bir javascripttir.Bir sunucu değişkeni javascript'e aktarılıyor

JavaScript işlevini çağıran bir düğme var, ancak JSP sayfasına aktarılan değişkenlerden hiçbirini sunucu aracılığıyla geçiremiyorum. Düğme bir formun bir parçası değildir.

arayacağımı JavaScript işlevi denedim:

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

VE

var x = '${myVar}'; 

VE Ancak

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

, x hep girilen şeyin bir dizedir .

AJAX veya JQuery kullanmıyorum. Herhangi bir fikir?

Örnek Kod, basitleştirilmiş bir sürümdür: (bu değeri değiştirdiğimde js olarak adlandırılan düğme aslında bir açılır menüdür, ancak, changeCLass içinde çağrılacak aşağı açılan bölümün diğer değişkenlerini istiyorum)

Servlet tarafı:

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

JSP:

<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 JSP şunlardır:

function changeClass(newVarX) { 

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

    alert(newVarId + " " + tID); 
} 

Çıktı: 1 $ (otherVars}

ancak çıkış olmalıdır: 1 testleri

+0

harici dosyadan alınan bu kodudur? – rano

+0

@ user1798546 bunu yapmanın basit bir yolu, değeri depolayan ve oradan alan gizli bir alan yaratmaktır. Başka bir yol ise değişken olarak js fonksiyonuna parametre ')'> Arama fonksiyonu' –

+0

Uygulamanızın daha iyi anlaşılması ve daha iyi bir çözüm sunması için atm (kod örneği ile) nasıl davrandığını açıklamak daha iyi –

cevap

3

JavaScript dosyası sunucusu tarafından işlenen olmadığı için bu, çalışmaz. Olası çözümler şunlardır:

  • JSP dosyasında global değişken tID bildirin.

    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); 
    } 
    
  • JavaScript dosyası da işlenebilir var. Sen JavaScript için bir JSP dosyası kullanmak ve doğru içerik türünü geçerli olabilir:

    JSP: Harici

    <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 (.jsp -> not, o da bir JSP dosyası, ama içerik türü/javascript) metne ayarlandığını:

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

Sadece cevabı düzenledim. İkinci çözümde, JavaScript dosyası bir JSP dosyasıdır, ancak içerik türü metin/javascript olarak ayarlanır. Bu, sunucuyu dosyayı işleyecektir, bu yüzden Java kodu kullanılabilir. – Jan

İlgili konular