谁能告诉我如何在 JSP 中将 JavaScript 值传递给 Scriptlet?
9 回答
我可以提供两种方式,
一个.jsp,
<html>
<script language="javascript" type="text/javascript">
function call(){
var name = "xyz";
window.location.replace("a.jsp?name="+name);
}
</script>
<input type="button" value="Get" onclick='call()'>
<%
String name=request.getParameter("name");
if(name!=null){
out.println(name);
}
%>
</html>
b.jsp ,
<script>
var v="xyz";
</script>
<%
String st="<script>document.writeln(v)</script>";
out.println("value="+st);
%>
您的 javascript 值是客户端的,您的 scriptlet 是在服务器端运行的。因此,如果您想在 scriptlet 中使用您的 javascript 变量,您需要提交它们。
为此,可以将它们存储在输入字段中并提交表单,或者执行 ajax 请求。我建议您为此研究 JQuery。
很简单,你不能!
JSP 是服务器端,javascript 是客户端,意思是在评估 javascript 时不再有“jsp 代码”。
我把这个问题解释为:
“谁能告诉我如何为JavaScript 传递值以在 JSP 中使用?”
如果是这种情况,这个 HTML 文件会将服务器计算的变量传递给 JSP 中的 JavaScript。
<html>
<body>
<script type="text/javascript">
var serverInfo = "<%=getServletContext().getServerInfo()%>";
alert("Server information " + serverInfo);
</script>
</body>
</html>
你不能这样做,但你可以做相反的事情:
在您的 jsp 中,您可以:
String name = "John Allepe";
request.setAttribute("CustomerName", name);
访问js中的变量:
var name = "<%= request.getAttribute("CustomerName") %>";
alert(name);
如果你说你想在 javascript 中将 javascript 值从一个 jsp 传递到另一个,那么使用 URLRewriting 技术将 javascript 变量传递给下一个 jsp 文件并在请求对象的下一个 jsp 中访问它。
否则你不能这样做。
它不可能如你所料。但是你可以做这样的事情。将您的 java 脚本值传递给 servlet/控制器,进行处理,然后将此值传递给 jsp 页面,方法是根据您的要求将其放入某个对象中。然后,您可以根据需要使用此值。
这是为其他登陆这里的人准备的。首先你需要一个servlet。我使用了@POST 请求。现在在您的 jsp 文件中,您有两种方法可以做到这一点:
使用 AJAX 的复杂方法,以防您是 jsp 的新手:您需要使用要在 java 类中使用的 javascript var 发布帖子,并使用 JSP 从您的请求中调用您的 java 函数:
$(document).ready(function() { var sendVar = "hello"; $('#domId').click(function (e) { $.ajax({ type: "post", url: "/", //or whatever your url is data: "var=" + sendVar , success: function(){ console.log("success: " + sendVar ); <% String received= request.getParameter("var"); if(received == null || received.isEmpty()){ received = "some default value"; } MyJavaClass.processJSvar(received); %>; } }); }); });
仅使用 JSP 的简单方法:
<form id="myform" method="post" action="http://localhost:port/index.jsp"> <input type="hidden" name="inputName" value=""/> <% String pg = request.getParameter("inputName"); if(pg == null || pg.isEmpty()){ pg = "some default value"; } DatasyncMain.changeToPage(pg); %>; </form>
当然在这种情况下你仍然需要从 JS 加载输入值(到目前为止我还没有想出另一种加载它的方法)。
我使用了 scriptlet、声明和表达式标签的组合...
<%!
public String st;
%>
<%
st= "<html> <script> document.writeln('abc') </script> </html>";
%>
<%=
" a " + st + " <br> "
%>
上面的代码在我的情况下工作得很好。