在jsp中将值从javascript传递给scriptlet时收到错误

时间:2013-05-28 17:37:41

标签: javascript jsp

我有一个要求,我需要将值从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)

您能否告诉我上述代码有什么问题?如何解决我现在面临的问题。

由于 Vikeng

1 个答案:

答案 0 :(得分:1)

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

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

然而,这有点不成比例,因为遗憾的是,您无法将值传递给scriptlet。它完全是单向的。

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

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

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

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