我有一个要求,我需要将值从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
答案 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重新加载页面。