2012-11-04 104 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