【问题标题】:Passing a servlet variable into javascript将 servlet 变量传递给 javascript
【发布时间】:2012-10-24 16:39:41
【问题描述】:

我希望传递一个 servlet 变量 myVar,它被传递到 JSP 页面,并将它传递给 JavaScript。 JavaScript 是包含在 JSP 页面中的外部 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:

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

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

JSP 中包含的 external.js:

function changeClass(newVarX) {

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

    alert(newVarId + " " + tID);
}

输出: 1 $(其他变量}

但输出应该是: 1 次测试

【问题讨论】:

  • 这段代码是取自外部文件吗?
  • @user1798546 简单的方法是创建一个隐藏字段来存储值并从那里获取它。另一种方法是将变量作为参数传递给js函数&lt;button onclick='someFunction(&lt;%= (String)request.getParameter("myVar") %&gt;)'&gt; Call function&lt;/button&gt;
  • 最好解释一下你的应用程序在atm的行为(带有代码示例),以便更好地理解并提供更好的解决方案
  • “JavaScript 是包含在 JSP 页面中的外部 javascript” - 您能否发布 JSP 以显示您如何包含此文件?
  • BTW ${otherVars} 不能单独工作 - 您需要使用 c:out 或类似的标签,例如

标签: javascript jsp variables servlets


【解决方案1】:

这不起作用,因为服务器未处理您的 JavaScript 文件。可能的解决方案是:

  • 在 JSP 文件中全局声明变量tID

    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(external.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);
    }
    

【讨论】:

  • 刚刚编辑了答案。在第二种解决方案中,JavaScript 文件是 JSP 文件,但内容类型设置为 text/javascript。这将使服务器处理文件,因此可以使用 Java 代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 2012-03-18
  • 2015-03-21
  • 2013-02-27
相关资源
最近更新 更多