2010-12-22 9 views
0

Ich habe ein Wicket-Formular, die Benutzer sollten eine Datei zum Download geben. Die Datei wird von einem externen Servlet (basierend auf dem Formular) generiert, das den generierten Inhalt in den Ausgabestream der Antwort schreibt.Wicket: Redirect zu freigegebenen Ressource

normalerweise kann dies unter Verwendung auf Formular übermittelt werden, wobei redirectUrl die externe Servlet-URL mit Parametern sein wird.

jedoch redirectUrl zeigt sich in Browser-Adressleiste, die nicht gut ist, wie Benutzer Parameterwerte sehen, die sie nicht sollten.

Um dies zu überwinden, habe ich eine benutzerdefinierte DynamicWebResource implementiert, die die Servlet-Ausgabe als byte[] abgerufen und ist gebunden an eine virtuelle URL durch übliche Wicket freigegebenen Ressourcenmechanismus.

auf Formular i wie folgt vor:

RequestParameters rps = new RequestParameters(); 
rps.setResourceKey(new ResourceReference("myResource").getSharedResourceKey()); 
getRequestCycle().setRequestTarget(new SharedResourceRequestTarget(rps)); 

und dann verlassen sich auf Wicket internen Möglichkeiten der Handhabung.

Beim Debuggen kann ich deutlich sehen, dass meine freigegebene Ressource korrekt aufgerufen wird, die Antwort des externen Servlet wird korrekt generiert, abgerufen und dann in die aktuelle Antwort mit allen Headern und Zeug geschrieben, aber danach passiert nichts, keine Fehler nichts.

wenn ich meine freigegebene Ressource direkt unter Angabe der URL-Wicket hat es gebunden (wie http://localhost:8080/webAppRoot/wicket/myResource?param1=value) - alles funktioniert, Datei ist wohlgeformt und herunterladbar.

Gibt es noch etwas, was ich noch tun muss? es ist wahrscheinlich etwas Dummes, aber ich habe mir schon seit einem Tag den Kopf gegen die Wand geschlagen ...

+0

Können Sie die relevanten Teile des Handlers onSubmit() posten? – bert

+0

es ist schon da, sonst nichts. Das gesamte aktuelle Geschäft wird in meiner freigegebenen Ressource erledigt. –

Antwort

0

Problem gelöst. Der Grund dafür, dass die Antwort nicht vom Browser verarbeitet wurde, war die Tatsache, dass das Formular mit AJAX gesendet wurde. Das Ändern des Übergabetyps in die Ebene löste das Problem.