【问题标题】:Remain in same page even after submitting jsp form [duplicate]即使在提交jsp表单后仍保持在同一页面[重复]
【发布时间】:2012-08-25 05:47:01
【问题描述】:

我正在使用 jsp 将数据发布到 servlet,但在发布数据后,我想保持原样的 jsp。 简要地: 1) 我这里有一个带有 2 个文本框的 jsp。我使用 javascript 通过单击按钮将数据从一个复制到另一个。 2)我使用相同的按钮将数据发布到数据库。 3)我希望同时完成这两个动作,不应该去第三个jsp(servlet post result),但是,应该去我使用的另一个jsp。

我能够分别处理这 2 件事,但在一起我无法做到。数据在数据库中更新并在第一个文本中显示一个新行(这是我的错,我正在使用重定向方式)或将数据从第一个文本框移动到另一个文本框并且不进行数据发布。请帮我做这件事。下面是我用来做的代码。

复制数据和发布数据的java脚本有:

function move(){  

document.getElementById('tgt1').value = document.getElementById('Allocation').value;  
document.getElementById('Allocation').value="";  
document.getElementById("Send").disabled=true;  

}
function invoke(but)  
  {  
   if(but==0)   
    {  
        document.myform.action="Alloc_Insert.do";  
    }  

按钮的方法声明如下:

<table><tr><center><td><input type="Submit" value="Allocate" id="Send"     onClick="invoke(0);move();" style="width:150px" style="font-size:100%"/></td></center></tr>    </table> 

我使用的servlet代码如下。

ResultSet rs=null;  
        String Add=request.getParameter("tgt1");  
        String user=(String) session.getAttribute("myusername");  
        Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();Date d1 = new Date();    
        String d1_str = new SimpleDateFormat("yyyy-MM-dd").format(d1);   
        Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system","tiger");  
        PreparedStatement ps=con.prepareStatement("UPDATE SCOPE1 SET ALLOCATED='"+d1_str+"', SPECIALIST='"+user+"' WHERE DBID='"+Add+"'");  
        con.setAutoCommit(true);  
        int i=ps.executeUpdate();  
        if(i==1)  
                           {  
             String redirectURL= "Update_Counts.jsp";  
            response.sendRedirect(redirectURL);  
                        }  
                   else{  

            out.print("retry");  
                  }  

我想发布数据以及与复制到第二个文本框中的文本框值相同,因为我将使用它作为我的进一步参考。

谢谢

【问题讨论】:

  • 只是作为一个选项 - 使用 javascript AJAX 调用 servlet 来发送/接收数据。
  • 嗨 Rafael 感谢您的回复,我是 java 新手,也不知道 Ajax 请让我知道如何在常规 jsps 或 javascripts 中实现这一点

标签: javascript jsp servlets


【解决方案1】:

正如我在评论中提到的,请考虑对您的 servlet 进行 javascript 异步调用 (AJAX)。

在这种情况下,您的页面不会更改,您可以在后台与服务器进行所有交互。

Here is AJAX tutorial

如果你不是经验丰富的 Javascript 程序员,那么考虑this JavaScript tutorial

JSP 本质上是一个 servlet,即它是服务器端代码,但是您可以将 javascript 嵌入到您的 JSP 页面中,这将在客户端的浏览器(客户端)上运行,并发送/接收数据包到服务器后台,无需将整个页面提交给服务器。

Here is the example of JSP and AJAX combination

【讨论】:

【解决方案2】:

你可以像这样在你的jsp中调用ajax:

function test(tg1){
  context = '${pageContext.request.contextPath}';
  var http_request = getXMLHttpRequest();
            if (!http_request) {
        alert('Giving up :( Cannot create an XMLHTTP instance');
        return false;
    }

    http_request.open("POST", context + "/ServletName?tgt1=" + tg1, true);
    http_request.onreadystatechange = function() {
        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
                var response = http_request.responseText;
                //do something if you have a response from the servlet
            }
        }
    };
    http_request.send(null);
}

在您的 servlet 中,删除您的重定向代码。

ResultSet rs=null;  
String Add=request.getParameter("tgt1");  
String user=(String) session.getAttribute("myusername");  
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();Date d1 = new Date();    
String d1_str = new SimpleDateFormat("yyyy-MM-dd").format(d1);   
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system","tiger");  
PreparedStatement ps=con.prepareStatement("UPDATE SCOPE1 SET ALLOCATED='"+d1_str+"', SPECIALIST='"+user+"' WHERE DBID='"+Add+"'");  
con.setAutoCommit(true);  
int i=ps.executeUpdate();  

您可以使用 response.getWriter().write("something"); 添加来自 servlet 的响应

【讨论】:

  • hi russell 感谢代码。如果我只在 jsps 中使用它,并且根本没有使用 servlet,请告诉我,如何修改此代码。
【解决方案3】:

在您的代码中,我可以看到(部分)2 个 JavaScript 函数 move()invoke(but)
第一个将数据从一个 DOM 元素 ('Allocation') 移动到另一个 ('tgt1')。 第二种是尝试向server/jsp页面提交数据。

这是正确的,你正在尝试做什么?

顺便说一句:您应该按照move(); invoke(...); 的顺序调用它们,而不是其他方式,因为一旦提交表单,move() 将不会运行 - 客户端不会发生任何事情,因为处理离开了页面。

我注意到,在你的 move() 函数中,你禁用了恰好是你的提交按钮的 DOM 元素“发送”(document.getElementById("Send").disabled=true;)。此操作将阻止提交表单,因此您应该删除该行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2017-04-06
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多