如何将JavaScript的值传递给JSP中的Scriptlet?

21

请问如何将JavaScript值传递到JSP中的Scriptlet?


你能提供更精确的需求细节吗?比如你计划实现什么,可能有一些伪代码之类的东西吗? - Mahendra Liya
9个回答

18

我可以提供两种方法:

a.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>
<script>
    var v="xyz";
</script>
<% 
    String st="<script>document.writeln(v)</script>";
    out.println("value="+st); 
%>

6
b.jsp的建议不起作用,它会打印出<script>document.writeln(v)</script> - Jeevanantham
b.jsp不起作用了,有人能帮我让它正常工作吗? - Abhijit Kurane

13

你的 Javascript 值是客户端的,而你的脚本是在服务器端运行的。因此,如果你想在脚本中使用你的 Javascript 变量,你需要将它们提交。

为了实现这一点,你可以将它们存储在输入字段中并提交表单,或者执行 ajax 请求。我建议你查看 JQuery 相关内容。


2

简单来说,你无法做到!

JSP是服务器端的,而JavaScript是客户端的,这意味着在JavaScript被执行时,就没有更多的“JSP代码”了。


1
我理解这个问题的意思是:
“有人能告诉我如何传递JavaScript中要在JSP中使用的值吗?”
如果是这种情况,这个HTML文件将向JSP中的JavaScript传递一个服务器计算的变量。
<html>
    <body>
        <script type="text/javascript">
            var serverInfo = "<%=getServletContext().getServerInfo()%>";
            alert("Server information " + serverInfo);
        </script>
    </body>
</html>

2
也许你没有好好阅读问题,他想将 JavaScript 值传递给 Scriplet 标签,而不是将 Scriplet 内部的值传递给 JavaScript :) - Mahendra Liya

1
您无法这样做,但可以做相反的操作:
在您的JSP中,您可以:
String name = "John Allepe";    
request.setAttribute("CustomerName", name);

访问JavaScript中的变量:

var name = "<%= request.getAttribute("CustomerName") %>";
alert(name);

0

这是给其他人来到这里的。 首先,您需要一个servlet。我使用了@POST请求。 现在,在您的jsp文件中,有两种方法可以做到这一点:

  1. 如果您是jsp的新手,可以使用AJAX进行复杂的方式: 您需要使用javascript var进行post,并使用JSP从请求内部调用您的java函数:

    $(document).ready(function() {
        var sendVar = "hello";
        $('#domId').click(function (e)
        {                               
            $.ajax({
                type: "post",
                url: "/", //或者您的url
                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); 
                      %>;                            
    
                }
            });
        });
    
    });
    
  2. 只需使用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加载输入值(到目前为止,我还没有想出另一种加载方式)。


0
如果你想在JavaScript中从一个JSP传递值到另一个JSP,那么可以使用URL重写技术将JavaScript变量传递到下一个JSP文件,并在请求对象中访问它。
否则,你是无法做到这一点。

0

您期望的不可能实现。但您可以尝试以下操作:将您的 JavaScript 值传递给 Servlet/Controller,进行处理,然后将该值放入某个对象中并根据您的要求传递到 JSP 页面中。然后,您可以根据需要使用此值。


0

我使用了脚本标记、声明标记和表达式标记的组合...

<%! 
   public String st; 
%>
<%
   st= "<html> <script> document.writeln('abc') </script> </html>";
%>
<%=
   " a " + st + " <br> "
%>

在我的情况下,上述代码完全正常运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接