2012-08-30 14 views
5

Używam jsp do publikowania danych w serwlecie, ale po opublikowaniu danych chcę pozostać z powrotem jsp. Krótko: 1) Mam jsp tutaj z 2 pola tekstowe. Używam javascript do kopiowania danych z jednego do drugiego na kliknięcie przycisku. 2) Używam tego samego przycisku do publikowania danych w bazie danych. 3) Chcę, aby oba działania zostały wykonane w tym samym czasie i nie powinny iść do trzeciego jsp (wynik postletu serwletu), ale powinien przejść do innego użycia jsp.Pozostań na tej samej stronie nawet po przesłaniu formularza jsp.

Jestem w stanie obsłużyć te 2 rzeczy oddzielnie, ale razem nie jestem w stanie tego zrobić. dane są aktualizowane w bazie danych i pokazuje nowy wiersz w pierwszym tekście (to moja wina używam sposobu przekierowania) lub przenosi dane z pierwszego pola tekstowego do drugiego i nie wysyła danych. pomóż mi o tym. poniżej jest fragment kodu, którego użyłem do zrobienia tego.

skryptu Java, aby skopiować dane i dane pocztowe są:

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

sposoby przycisku deklarowane są w następujący sposób:

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

a kod serwletu i używane są następujące.

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

chcę pisać dane aswell jak być na tym samym o wartości pola tekstowego kopiowane do drugiego pola tekstowego, jak bym go używać dla mojego dalszego odniesieniaVansWywrotki.

Dzięki

+0

Podobnie jak opcja - użyj wywołań AJAX javascript do serwletu, aby wysyłać/odbierać dane. –

+0

Witam Rafael, dziękuję za odpowiedź, jestem nowy w Javie, a także nieświadomy Ajax plz daj mi znać, jak to osiągnąć w regularnych jsps lub javascripts – Rakesh

Odpowiedz

1

jak wspomniałem w moim komentarzu, należy rozważyć asynchronicznych wywołań JavaScript (Ajax) na swojej serwletu.

W tym przypadku Twoja strona nie ulegnie zmianie i będziesz mógł wykonywać całą interakcję z serwerem w tle.

Here is AJAX tutorial

Jeśli nie doświadczył JavaScript programista, a następnie rozważyć this JavaScript tutorial

JSP na swojej natury jest aplet, czyli jest kod po stronie serwera, ale można osadzić skrypt do swojej strony JSP, że będzie działać w przeglądarce klienta (po stronie klienta) i wysyłać/odbierać pakiety danych na serwer w tle, bez przesyłania całej strony do serwera.

Here is the example of JSP and AJAX combination

+0

Czy mógłbyś proszę dać mi znać, jak to zrobić za pomocą javascript i tylko jsps – Rakesh

+0

Sprawdź ten artykuł: http://balusc.blogspot.com/2009/05/javajspjsf-and-javascript.html –

0

można wywołać ajax w JSP tak:

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

W swojej serwletu, usunąć kod przekierowania.

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

Możesz dodać odpowiedź z serwletu przy użyciu response.getWriter().write("something");

+0

hi russell dzięki za kod. Czy mógłbyś dać mi znać, jeśli używam tego tylko w jsps, i żadnych serwletów używanych jak to jest modyfikować ten kod. – Rakesh

0

W kodzie widzę (części) 2 funkcje JavaScript move() i invoke(but).
Pierwsza przenosi dane z jednego elementu DOM ("Przyporządkowanie") do innego ("tgt1"). Druga próbuje przesłać dane na serwer/stronę JSP.

Czy to jest prawidłowe i to, co próbujesz zrobić?

BTW: powinieneś zadzwonić do nich w kolejności move(); invoke(...);, NIE na odwrót, ponieważ po przesłaniu formularza move() nie uruchomi się - nic nie może się zdarzyć po stronie klienta, ponieważ przetwarzanie opuściło stronę.

Zauważyłem, że w funkcji move() wyłącza się element DOM "Wyślij" (document.getElementById("Send").disabled=true;), który jest przyciskiem przesyłania. To działanie uniemożliwi przesłanie formularza, więc prawdopodobnie powinieneś usunąć ten wiersz.

Powiązane problemy