2014-11-17 4 views
9

zum Beispiel zu alarmieren:

Ich habe eine js wie:

$.get('Test_Controller.html',function(response){ 
    alert(response); 
}); 

und in meinem Test_Controller.html Servlet ich habe:

request.setAttribute("test","testData"); 
    RequestDispatcher requestDispatcher = 
    request.getRequestDispatcher("/test.jsp"); 
    requestDispatcher.forward(request,response); 

Frage ist:

warum das die response wird immer wachsam der Textinhalt des test.jsp und nicht die JSON, die ich durch die

EDIT getWriter() geben:

Ich brauche das bekommen:

TestData testData = new TestData(); 
    request.setAttribute("test",testData); 

mit jQuery $ .get(), so dass die Die Seite wird nicht neu geladen, aber leider, wenn ich nicht gesendet habe, scheint mein Antwortobjekt null zu sein, und wenn ich die Nachricht verschicke und weiterleite, warne ich den Text der Seite.

+0

Warum Sie eine Antwort vorbereiten würde dann nach vorne auf eine andere Seite? Ist die Antwort nicht bereit, nachdem du den JSON darin geschrieben hast? Wenn Sie auch 'test.jsp' aufrufen müssen, warum generieren Sie nicht den JSON aus' test.jsp'? – geert3

+0

Bitte überprüfen Sie meine aktualisierte Frage zur Klärung.danke – Yaje

+0

nach deiner Bearbeitung, ich sehe keine Erwähnung des JSON mehr. Schreiben Sie jetzt den JSON aus der JSP? Bitte klären Sie. Wie auch immer, um das request.setAttribute() Zeug zu bekommen, kannst du das nicht als URL Parameter übergeben? Wie zum Beispiel '$ .get ('Test_Controller.html? Test = testData')' – geert3

Antwort

6

Sie möchten einige Informationen aus Ihrem Servlet zurück auf den Client schreiben. Ihre serlvet könnte wie folgt aussehen:

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    response.setContentType("application/json"); 
    Writer w = response.getWriter(); 
    w.append("... your json here ...."); 
} 

Und das ist alles gibt es (natürlich das Servlet URL Verdrahtung in web.xml). Ihr $.get() sollte sehen, was auch immer Sie in den Schreiber schreiben.

Beachten Sie, dass sowohl was gesendet (in Java) und was (in Javascript) empfangen wird, Text-Strings sind. Sie sind dafür verantwortlich, Ihre Daten auf der Java-Seite in lesbare JSON zu konvertieren und den Text als JSON auf der Javascript-Seite zu interpretieren. Letzteres kann wie folgt geschehen:

$.get(....., function(data) { 
    try { 
     // convert the text to JSON 
     data = jQuery.parseJSON(data); 
    } catch (e) { 
     alert("Problem reading data: "+e); 
    } 
    ... use the JSON data ... 
} 
+0

Wenn ich 'w.append()' verwende, kann ich ein Objekt in das 'append()' setzen? zum Beispiel eine 'testData', die viele Attribute enthält? – Yaje

+0

Nein, der Writer benötigt 'String's (' CharSequence' um genau zu sein). Es gibt wahrscheinlich viele Benutzerklassen (oder sogar in der Java API), um den Namen/Werttyp, den Sie haben (HashMap? Eigenschaften?) In lesbare JSON umzuwandeln. – geert3

+0

siehe meine Klarstellungen in der Hauptantwort – geert3

2

In diesem Fall ist die endgültige Antwort wird von test.jsp kommen, weil Sie die Anfrage weitergeleitet haben innerhalb dieser Test_Controller.html test.jsp. Wenn Sie diese JSON-Daten in test.jsp drucken möchten, müssen Sie diese Anfrage nicht an die Seite test.jsp weiterleiten. Andernfalls können Sie diese JSON-Datei auch innerhalb von test.jsp mit dem folgenden scriplet-Tag erstellen:

Happy Coding !!!

+0

Hallo, vielen Dank für die Klärung der endgültigen Antwort .. gibt es eine Möglichkeit, das Request-Attribut zurück zu $ ​​.get() Antwort ohne JSON und Dispatcher übergeben? – Yaje

+0

Yes.Inside Test_Controller.html können wir schreiben: Ich werde vorschlagen, dass Sie jsp Seite verwenden anstelle von html.In diesem Fall können Sie in Test_Controller.jsp schreiben: <% TestData testData = new TestData(); out.println (testData); %> –

+1

Nur um zu klären .. der 'Test_Contoller.html' ist ein zugeordnetes Servlet. eine .java-Klasse. – Yaje

-1

Holen Sie das Objekt in test.jsp.

<% 
    TestData testData = (TestData) request.getAttribute("test"); 
    String testDataString = new GSON().toJson(testData); 
    out.println(testDataString); 
%> 

Javascipt USE $ .getJSON statt $ .get

$.getJSON('Test_Controller.html',function(responseJSON){ 
    alert(responseJSON); 
var testData = responseJSON;// Then you can accesss your class values. 

$.each(testData,function(key,value){ 
     alert("Key:-"+key+": Value:-"+value"); 
    } ); 

});