2012-11-04 260 views
6

我正在尋找傳遞一個servlet變量myVar傳遞給JSP頁面並將其傳遞給JavaScript。 JavaScript是包含在JSP頁面中的外部JavaScript。將一個servlet變量傳遞給javascript

我有一個調用JavaScript函數的按鈕,但我無法傳遞任何通過servlet傳遞到JSP頁面的變量。該按鈕不是表單的一部分。

我試圖在JavaScript中的函數調用:

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

var x = '${myVar}'; 

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

然而,x始終是什麼,我輸入一個字符串。

我沒有使用AJAX或JQuery。有任何想法嗎?

示例代碼是一個簡化版本:(因此,按鈕實際上是一個下拉菜單,當我更改該值時會調用js,但是,我希望其他變量不屬於下拉菜單中的其他變量,可以在changeCLass中調用)

的Servlet側:

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

JSP:包括在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:

function changeClass(newVarX) { 

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

    alert(newVarId + " " + tID); 
} 

輸出: 1 $(otherVars}

但輸出應該是: 1測試

+0

此代碼從外部文件獲取? – rano

+0

@ user1798546簡單的做法是創建一個隱藏字段,用於存儲值並從中獲取值。另一種方法是將變量作爲參數傳遞給js函數 ''button onclick ='someFunction(<%=(String)request.getParameter(「myVar」)%>)'>調用函數' –

+0

它會是更好地解釋你的應用程序如何表現atm(使用代碼示例)以更好地理解並提供更好的解決方案 –

回答

3

這是不行的,因爲你的JavaScript文件不是由服務器處理。可能的解決方案是:

  • 聲明變量tID在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); 
    } 
    
  • 有JavaScript文件也可以被處理。您可以使用JavaScript的JSP文件和應用正確的內容類型:

    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(外部。JSP - >注意,這是一個JSP文件,太,但內容類型設置爲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

剛編輯答案。在第二個解決方案中,JavaScript文件是一個JSP文件,但內容類型設置爲text/javascript。這將使服務器處理文件,因此可以使用Java代碼。 – Jan