6

jsp を使用してデータをサーブレットに投稿していますが、データを投稿した後は同じ jsp に戻りたいと考えています。簡単に言うと: 1) ここに 2 つのテキスト ボックスを持つ jsp があります。ボタンをクリックすると、JavaScriptを使用してデータを別のデータにコピーします。2) 同じボタンを使用して、データをデータベースに投稿します。3) 両方のアクションを一度に実行する必要があり、3 番目の jsp (サーブレットのポスト結果) に移動する必要はありませんが、使用する別の 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> 

私が使用したサーブレットコードは次のとおりです。

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");  
                  }  

私はデータを投稿したいだけでなく、2番目のテキストボックスにコピーされたテキストボックスの値と同じになりたいと思っています.

ありがとう

4

3 に答える 3

1

コメントで述べたように、サーブレットへの JavaScript 非同期呼び出し (AJAX) を検討してください。

この場合、ページは変更されず、バックグラウンドでサーバーとのやり取りをすべて行うことができます。

ここにAJAXチュートリアルがあります

JavaScript プログラマーの経験がない場合は、この JavaScript チュートリアルを検討してください。

JSP は本質的にサーブレット、つまりサーバー側のコードですが、クライアントのブラウザ (クライアント側) で動作し、バックグラウンドでサーバーにデータ パケットを送受信する JavaScript を JSP ページに埋め込むことができます。ページ全体をサーバーに送信する必要はありません。

JSP と AJAX の組み合わせの例を次に示します。

于 2012-08-30T18:20:45.330 に答える
0

次のように、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);
}

サーブレットで、リダイレクト コードを削除します。

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");

于 2012-08-31T12:02:07.383 に答える
0

あなたのコードでは、2 つの JavaScript 関数 (の一部)move()invoke(but).
最初のものは、ある DOM 要素 ('Allocation') から別の DOM 要素 ('tgt1') にデータを移動します。2 つ目は、サーバー/jsp ページにデータを送信しようとしています。

それは正しいですか、それはあなたがやろうとしていることですか?

move(); invoke(...);ところで、フォームが送信されると move() は実行されないため、処理がページを離れたため、クライアント側では何も起こらないため、 の順序でそれらを呼び出す必要があります。

document.getElementById("Send").disabled=true;move() 関数で、たまたま送信ボタンであるDOM 要素「送信」( ) を無効にしていることに気付きました。このアクションにより、フォームが送信されなくなるため、おそらくその行を削除する必要があります。

于 2012-09-05T11:53:21.107 に答える