简体   繁体   中英

getting error while passing value from javascript to scriplet in jsp

I have a requirement where i need to pass a value from Javascript to a Scriplet in a JSP. i am aware that javascript is executed on client side and jsp on the server side.i have searched online and googled a lot but till now i am not able to find a solution that i am looking for. The JSP code is as below. both javascript and scriplet are in same 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>
   <%
    }
   %>

In the above code i am trying to pass a value from Javascript to a scriplet. But i am getting a NumberFormatException when i try to parse that string and convert to int. looks like the variable st is not of a string type.

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

Can you please let me know what is the problem with the above code and how can i resolve the problem that i am facing now.

Thanks Vikeng

The reason why you can't parse "<script>document.writeln(v)</script>" as an int is because it contains characters other than digits.

Even though it looks like it contains <script> tags - it's still not code that will execute or evaluate to a number. Because it's in quotes it's just a string. So "<script>document.writeln(v)</script>" looks the same to the parser as would "tic/v)neiwtm>oprs<citdun.rtl(<rp>" .

This is somewhat of a moot point however, because unfortunately, you can't pass values to scriptlets. It's completely one-directional.

In order to get your page communicating with your java, you'll need to pass your params while requesting some handler.

For example, you could do some asynchronous JavaScript:

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

Then your request handler could take that parameter st , parse it or whatever you need to do, modify the model - adding this new value as an attribute, and then from JavaScript, reload the page.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM