【问题标题】:How do I pass JavaScript values to Scriptlet in JSP?如何在 JSP 中将 JavaScript 值传递给 Scriptlet?
【发布时间】:2011-08-07 17:54:26
【问题描述】:

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

【问题讨论】:

  • 您能否提供更准确的需求细节?比如你打算实现什么……比如可能是一些伪代码之类的?

标签: java javascript jsp scriptlet


【解决方案1】:

我可以提供两种方式,

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>

b.jsp

<script>
    var v="xyz";
</script>
<% 
    String st="<script>document.writeln(v)</script>";
    out.println("value="+st); 
%>

【讨论】:

  • b.jsp 建议不起作用,它会打印出&lt;script&gt;document.writeln(v)&lt;/script&gt;
  • 是的 b.jsp 无法正常工作。谁能帮我让它工作
【解决方案2】:

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

要实现这一点,要么将它们存储在输入字段中并提交表单,要么执行 ajax 请求。我建议您为此研究 JQuery。

【讨论】:

    【解决方案3】:

    简单,你不能!

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

    【讨论】:

      【解决方案4】:

      我把这个问题解释为:

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

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

      <html>
          <body>
              <script type="text/javascript">
                  var serverInfo = "<%=getServletContext().getServerInfo()%>";
                  alert("Server information " + serverInfo);
              </script>
          </body>
      </html>
      

      【讨论】:

      • 可能是您没有正确阅读问题,他想将 javascript 值传递给 scriplet 标签,而不是将 scriplet 中的值传递给 javascript :)
      【解决方案5】:

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

      在你的jsp中你可以:

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

      访问js中的变量:

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

      【讨论】:

        【解决方案6】:

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

        否则你不能做到这一点。

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

            这是为其他登陆这里的人准备的。 首先你需要一个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 中加载输入值(目前我还没有想出另一种加载方式)。

            【讨论】:

              【解决方案9】:

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

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

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

              【讨论】:

                猜你喜欢
                • 2018-05-03
                • 2014-01-17
                • 1970-01-01
                • 2014-01-07
                • 2011-04-03
                • 2019-01-12
                • 2016-04-07
                相关资源
                最近更新 更多