# Ajax Request verhindert forward?



## sicLotus (11. Jun 2011)

Hallo! Ich habe ein seltsames Problem und hoffe ihr könnt mir einen Rat geben:

Ich nutze in meinem J2EE Projekt einen Controller, welcher mehr oder weniger nach dem Schema aufgebaut ist:

```
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, InstantiationException, IllegalAccessException, ClassNotFoundException {
		String pathInfo = request.getPathInfo();
String servlet = pathInfo.substring(1);
if(servlet.equals("<command>")){
			<commandHandler> handler = new <commandHandler>();
			view = handler.processRequest(request, response); //Rückgabe vom Command
		}
if (view != null) {
		RequestDispatcher dispatcher = request.getRequestDispatcher(view);
	    dispatcher.forward(request, response);
}
```

Das funktioniert bisher auch ganz gut. Allerdings habe ich jetzt ein Problem:
Ich weiß nicht, wie ich über diesen Controller Request-Daten mitschicken soll. Meistens habe ich ein Formular, welches per submit und post versendet wird, dann sind die Daten "automatisch" im "Request" drin und ich kann sie mit

```
String foo = request.getParameter("<data>");
```
auslesen. Um jetzt Daten mitzuschicken, sende ich per Ajax ein Request, dass sieht so aus:

```
function showBooks(genre) {
  var _data = "genre="+genre;
  jQuery.ajax({
  			url: "showBooks",
  			type: "POST",
  			data: _data,
  			success: function (reqCode) {	
  			}
  		});
  }
```

Funktionieren tut das auch soweit, allerdings wird jetzt das requestDispatcher.forward() nicht mehr ausgeführt. Es scheint, als blocke Ajax das irgendwie :-/ Ich kann die Seite aber nicht einfach neu laden, weil ich im request Daten mitschicke, die halt nur 1x drin sind. Wisst ihr wie man das lösen könnte?


----------



## tagedieb (11. Jun 2011)

> Funktionieren tut das auch soweit, allerdings wird jetzt das requestDispatcher.forward() nicht mehr ausgeführt. Es scheint, als blocke Ajax das irgendwie :-/ Ich kann die Seite aber nicht einfach neu laden, weil ich im request Daten mitschicke, die halt nur 1x drin sind. Wisst ihr wie man das lösen könnte?



Wo ist genau das Problem? Wird der entsprechende Code ueberhaupt durchlaufen?
Und was erwartet dein Ajax Request fuer ein Resultat, Format? XML, JSON, HTML?

Eventuell schickst du doch einfach nen normalen Request anstatt eines Ajax Request?


----------



## sicLotus (11. Jun 2011)

Wie schicke ich denn einen "normalen" request? Wie gesagt, bisher hab ich requests nur per submit - formular gesendet oO
der code wird aufjedenfall durchlaufen, das habe ich getestet.. tja.. welches resultat erwartet wird weiß ich selber nicht :/ ich glaub ajax kann mit allen 3 umgehen..


----------



## tagedieb (11. Jun 2011)

:bahnhof:

ja wie nun? schickst du nun einen normalen form submit request oder einen Ajax via jquery.ajax()..?

Wenn du eh jedesmal die Seite neu laedst wozu brauchst du ueberhaupt Ajax? 
Ajax wird verwendet um Teile der aktuellen Seite zu aktualisieren. Dazu musst du nun mal wissen ob du HTML, XML oder JSON erwartest. Natuerlich kann Ajax damit umgehen, aber du musst doch definieren welchen Teil der Seite du aktualisieren willst!


----------



## sicLotus (11. Jun 2011)

Okay, ich merke ich werde missverstanden.
Ich habe diesmal kein Formular, darum kann ich nicht einfach nen Submit Button machen um irgendwas abzusenden.. Ich möchte quasi auf einen Link klicken und dann soll ein Request gesendet werden, ob das nun ein normaler oder mit Ajax ist, ist mir egal. Ich weiß halt nicht, wie ich einen "normalen" Request außerhalb eines Formulars sende.


----------



## tagedieb (11. Jun 2011)

???:L

Spricht etwas gegen die Verwendung von einem ganz normalen HTML-Link?



```
<a href="context-root/servlet/command?data=foo">link</a>
```

Ansonsten ein *<form>* drum herumpacken und das form via link verschicken.


```
<a href="" onclick="form.submit(); return false;">link</a>
```


----------



## sicLotus (11. Jun 2011)

Naja, wie du an dem Code oben sehen kannst, les ich aus dem Link den Command aus, wenn ich da Daten anhänge (also an den direkten Link), dann wird der Command nicht mehr erkannt. Das ist ja das Problem. Und wenn ich nen form rumpacke, wo werden dann die Daten mitgesendet? Dann müsste ich die Daten in nem unsichtbaren Formular haben oder?


----------



## tagedieb (11. Jun 2011)

Lies mal die J2EE Doku durch Writing Service Methods - The Java EE 6 Tutorial


```
request.getPathInfo()
```
 gibt den Teil zwischen dem Servlet-Path und dem '?' zurueck. Also wird dein Command ganz normal erkannt.



```
http://[host]:[port][contex-path][servlet-path][path-info]?[query-string]
The request path is further composed of the following elements:

Context path: A concatenation of a forward slash (/) with the context root of the servlet’s web application.

Servlet path: The path section that corresponds to the component alias that activated this request. This path starts with a forward slash (/).

Path info: The part of the request path that is not part of the context path or the servlet path.
```


----------



## sicLotus (12. Jun 2011)

Omg ich Idiot! Herzlichen Dank! Vor lauter Panik dass ich es nicht umgesetzt bekomme habe ich gar nicht mehr an das ? gedacht... :/ Vielen herzlichen Dank.


----------

