21

谁能告诉我如何在 JSP 中将 JavaScript 值传递给 Scriptlet?

4

9 回答 9

17

我可以提供两种方式,

一个.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); 
%>
于 2011-04-18T10:10:04.027 回答
12

您的 javascript 值是客户端的,您的 scriptlet 是在服务器端运行的。因此,如果您想在 scriptlet 中使用您的 javascript 变量,您需要提交它们。

为此,可以将它们存储在输入字段中并提交表单,或者执行 ajax 请求。我建议您为此研究 JQuery。

于 2011-04-18T10:53:40.963 回答
2

很简单,你不能!

JSP 是服务器端,javascript 是客户端,意思是在评估 javascript 时不再有“jsp 代码”。

于 2011-04-18T09:43:59.807 回答
1

我把这个问题解释为:

“谁能告诉我如何JavaScript 传递值以在 JSP 中使用?”

如果是这种情况,这个 HTML 文件会将服务器计算的变量传递给 JSP 中的 JavaScript。

<html>
    <body>
        <script type="text/javascript">
            var serverInfo = "<%=getServletContext().getServerInfo()%>";
            alert("Server information " + serverInfo);
        </script>
    </body>
</html>
于 2011-04-18T09:56:18.660 回答
1

你不能这样做,但你可以做相反的事情:

在您的 jsp 中,您可以:

String name = "John Allepe";    
request.setAttribute("CustomerName", name);

访问js中的变量:

var name = "<%= request.getAttribute("CustomerName") %>";
alert(name);
于 2017-03-16T17:32:57.660 回答
0

如果你说你想在 javascript 中将 javascript 值从一个 jsp 传递到另一个,那么使用 URLRewriting 技术将 javascript 变量传递给下一个 jsp 文件并在请求对象的下一个 jsp 中访问它。

否则你不能这样做。

于 2011-04-18T09:46:20.503 回答
0

它不可能如你所料。但是你可以做这样的事情。将您的 java 脚本值传递给 servlet/控制器,进行处理,然后将此值传递给 jsp 页面,方法是根据您的要求将其放入某个对象中。然后,您可以根据需要使用此值。

于 2011-04-18T10:02:59.910 回答
0

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

  1. 使用 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); 
                      %>;                            
    
                }
            });
        });
    
    });
    
  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 加载输入值(到目前为止我还没有想出另一种加载它的方法)。

于 2018-09-14T10:54:49.957 回答
0

我使用了 scriptlet、声明和表达式标签的组合...

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

上面的代码在我的情况下工作得很好。

于 2021-12-22T18:16:35.020 回答