0

我有一个要求,我需要将值从 Javascript 传递到 JSP 中的 Scriplet。我知道javascript在客户端执行,jsp在服务器端执行。我在网上搜索过很多,但直到现在我找不到我正在寻找的解决方案。JSP 代码如下。javascript 和 scriplet 都在同一个 jsp 中。

 <script type="text/javascript">
   var strUrl = window.location.href;
   var aps = strUrl.toLowerCase().indexOf("values");
   var modifiedString = strUrl.substring(aps+8);
   var v = strUrl.indexOf(modifiedString);
   document.write(v);
</script>
 <%
    String st="<script>document.writeln(v)</script>";
    out.println("-----"+st);
    int pareseValue = Integer.parseInt(st);
    if(st.equals("0")){
      out.println("test");
     %>                     

   <h1><div class="xyz">
     <fmt:message>header.txt</fmt:message>
   </div></h1>                              

   <%
     }else{
   %>           

    <div class="pqr">
        <fmt:message>header1.txt</fmt:message>
   </div>
   <%
    }
   %>

在上面的代码中,我试图将一个值从 Javascript 传递给一个 scriplet。但是当我尝试解析该字符串并转换为 int 时,我得到了 NumberFormatException。看起来变量 st 不是字符串类型。

    String st="<script>document.writeln(v)</script>";
    out.println("-----"+st);
    int pareseValue = Integer.parseInt(st)

你能告诉我上面的代码有什么问题吗,我该如何解决我现在面临的问题。

谢谢维肯

4

1 回答 1

1

您无法解析"<script>document.writeln(v)</script>"为 int 的原因是它包含数字以外的字符。

即使它看起来包含<script>标签 - 它仍然不是将执行或评估为数字的代码。因为它在引号中,所以它只是一个字符串。所以"<script>document.writeln(v)</script>"看起来与解析器一样"tic/v)neiwtm>oprs<citdun.rtl(<rp>"

然而,这有点争议,因为不幸的是,您不能将值传递给 scriptlet。它完全是单向的。

为了让您的页面与您的 java 通信,您需要在请求一些处理程序时传递您的参数。

例如,您可以执行一些异步 JavaScript:

    var asyncHR = new XMLHttpRequest();
    var URL = "https://www.yourserver.com/intparser?st=v";
    asyncHR.open("GET", URL, true);
    asyncHR.send(); 

然后您的请求处理程序可以获取该参数st,解析它或您需要做的任何事情,修改模型 - 添加这个新值作为属性,然后从 JavaScript 重新加载页面。

于 2013-05-28T22:48:19.043 回答