2012-08-30 41 views
5

Estoy usando un jsp para publicar datos en un servlet, pero después de publicar los datos quiero quedarme nuevamente en jsp. En pocas palabras: 1) Tengo un jsp aquí con 2 cuadros de texto. Uso un javascript para copiar datos de uno a otro con un clic de botón. 2) Uso el mismo botón para publicar datos en una base de datos. 3) Quiero que las dos acciones se hagan a la vez y no se deben pasar al tercer jsp (resultado de la publicación del servlet), pero sí a otra jsp que uso.Permanecer en la misma página incluso después de enviar el formulario jsp

soy capaz de manejar estas 2 cosas por separado pero juntas no puedo hacerlo. los datos se actualizan en la base de datos y muestran una nueva línea en el primer texto (es mi culpa que estoy usando el método de redireccionamiento) o mueve los datos del primer cuadro de texto a otro y no hace la publicación de datos. por favor ayúdame a hacerlo. a continuación está la pieza de código que solía hacer.

java script para copiar los datos y datos de envío son:

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

los métodos para el botón se declaran los siguientes:

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

y el código de servlet i utilizadas son las siguientes.

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

Quiero publicar los datos aswell como estar en el mismo con el valor de texto copiado en el segundo cuadro de texto, como se iba a usar para mi más referrence.

Gracias

+0

Solo como una opción: use javascript AJAX llama al servlet para enviar/recibir datos. –

+0

Hola Rafael, gracias por la respuesta, soy nuevo en Java y también desconozco que Ajax me permite saber cómo lograr esto en jsps regulares o javascripts – Rakesh

Respuesta

1

como he mencionado en mi comentario, consideran llamadas asíncronas de JavaScript (AJAX) a su servlet.

En este caso, su página no cambiará y podrá hacer toda su interacción con el servidor en segundo plano.

Here is AJAX tutorial

Si usted no tiene experiencia Javascript programador, y luego considerar this JavaScript tutorial

JSP en su naturaleza es un servlet, es decir, es el código del lado del servidor, pero se puede incrustar JavaScript a su página JSP, que funcionará en el navegador del cliente (lado del cliente) y enviará/recibirá paquetes de datos al servidor en segundo plano, sin enviar toda la página al servidor.

Here is the example of JSP and AJAX combination

+0

¿Podría por favor hágamelo saber mediante javascript y jsps solo – Rakesh

+0

Check este artículo: http://balusc.blogspot.com/2009/05/javajspjsf-and-javascript.html –

0

Puede invocar el Ajax en su JSP como esto:

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

En el servlet, eliminar el código de redirección.

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

Puede añadir una respuesta del servlet utilizando response.getWriter().write("something");

+0

hola russell gracias por el código. ¿Podría decirme si lo uso solo en jsps y no hay servlets utilizados? atall, ¿cómo se modificará este código? – Rakesh

0

En su código Veo (partes de) 2 funciones de JavaScript move() y invoke(but).
El primero mueve los datos de un elemento DOM ('Asignación') a otro ('tgt1'). El segundo está intentando enviar datos a la página server/jsp.

¿Es correcto eso y lo que está tratando de hacer?

BTW: debe llamarlos en el orden de move(); invoke(...);, NO DE OTRO MODO porque una vez que se envía el formulario mover() no se ejecutará - nada puede pasar en el lado del cliente, porque el procesamiento salió de la página.

Me di cuenta de que en su función move() deshabilita el elemento DOM "Enviar" (document.getElementById("Send").disabled=true;) que es su botón de envío. Esta acción evitará que se envíe el formulario, por lo que probablemente deba eliminar esa línea.

Cuestiones relacionadas