2012-08-30 13 views
5

Sto usando un jsp per inviare dati a un servlet, ma dopo aver postato i dati voglio rimanere indietro in jsp. Brevemente: 1) Ho un jsp qui con 2 caselle di testo. io uso un javascript per copiare i dati da uno all'altro con un clic del mouse. 2) Uso lo stesso pulsante per inviare dati a un database. 3) Voglio che entrambe le azioni siano eseguite alla volta e non dovrebbe andare al terzo jsp (risultato di servlet post), ma, dovrei andare a un altro jsp che uso.Rimane nella stessa pagina anche dopo aver inviato il modulo jsp

sono in grado di gestire queste 2 cose separatamente ma insieme non riesco a farlo. i dati vengono aggiornati nel database e mostrano una nuova riga nel primo testo (è colpa mia sto usando il modo di reindirizzamento) o sposta i dati dalla prima casella di testo a un'altra e non effettua la registrazione dei dati. per favore aiutami a farlo di seguito è il pezzo di codice che ho usato per farlo.

java script per copiare i dati ed i dati post sono:

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

i metodi per il tasto sono dichiarati come segue:

<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> 

e il codice del servlet ho usato sono i seguenti.

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

Voglio inviare i dati proprio come essere sulla stessa con il valore di testo copiato nella seconda casella di testo, come vorrei essere usando per la mia ulteriormente referrence.

Grazie

+0

Come opzione: utilizzare le chiamate javascript AJAX al servlet per inviare/ricevere dati. –

+0

Ciao Rafael grazie per la risposta, sono nuovo di java e anche inconsapevole di Ajax plz fammi sapere come ottenere questo in js o javascrips regolari – Rakesh

risposta

1

Come ho detto nel mio commento, considerano le chiamate Asynchronous JavaScript (AJAX) al vostro servlet.

In questo caso la pagina non cambierà e sarà possibile effettuare tutte le interazioni con il server in background.

Here is AJAX tutorial

Se non siete esperti Javascript programmatore, quindi prendere in considerazione this JavaScript tutorial

JSP sulla sua natura è un servlet, vale a dire che è il codice lato server, ma è possibile incorporare javascript per la pagina JSP, che funzionerà sul browser del client (lato client) e invierà/riceverà i pacchetti di dati al server in background, senza inviare l'intera pagina al server.

Here is the example of JSP and AJAX combination

+0

Puoi per favore fammi sapere come farlo usando javascript e jsps solo – Rakesh

+0

questo articolo: http://balusc.blogspot.com/2009/05/javajspjsf-and-javascript.html –

0

È possibile richiamare ajax nella vostra jsp come questo:

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

Nel vostro servlet, rimuovere il codice di reindirizzamento.

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

È possibile aggiungere una risposta dal servlet utilizzando response.getWriter().write("something");

+0

hi russell grazie per il codice. Per favore fatemi sapere se lo uso solo in jsps, e nessun servlet usato atall, come è possibile modificare questo codice. – Rakesh

0

Nel codice posso vedere (parti di) 2 funzioni JavaScript move() e invoke(but).
Il primo sposta i dati da un elemento DOM ("Allocazione") a un altro ("tgt1"). Il secondo sta tentando di inviare dati alla pagina server/jsp.

È corretto e che cosa stai cercando di fare?

BTW: dovresti chiamarli nell'ordine di move(); invoke(...);, NON altrimenti, perché una volta inviato il modulo move() non verrà eseguito - non può accadere nulla sul lato client, perché l'elaborazione ha lasciato la pagina.

Ho notato che nella tua funzione move() hai disabilitato l'elemento DOM "Send" (document.getElementById("Send").disabled=true;) che risulta essere il pulsante di invio. Questa azione impedirà l'invio del modulo, quindi dovresti probabilmente rimuovere quella linea.

Problemi correlati