Servlet: Problem mit getParameterValues

nEp

Aktives Mitglied
Hallo,

ich habe ein kleines Problem das ich nicht so richtig verstehe und ich hoffe dass da jemand Licht ins Dunkel bringen kann...

Ich habe folgendes einfaches Formular in einer JSP. Bei Submit wird ein Servlet aufgerufen.
Java:
...
<form method="GET" action="MyServlet">
   <input type="checkbox" name="dataSource"  value="wert1" checked />
   <input type="checkbox" name="dataSource"  value="wert2" checked />
   <input type="checkbox" name="dataSource"  value="wert3" />
    ....
   <input type="text" value="unwichtig" name="unwichtig" />
    ....
</form>
...

Servlet-Auszug:
Java:
...
//Im Servlet:
String unwichtig = request.getParameter("unwichtig");
String[] dataSources = request.getParameterValues("dataSource");
PrintWriter writer = response.getWriter();
writer.write(dataSources.length);
...

Wenn ich nun das Formular im Browser aufrufe dann funktioniert das ganze auch ohne Probleme, d.h. wenn zwei Häkchen markiert sind, wird hier auch 2 als Länge ausgegeben und ich kann natürlich auch später auf die einzelnen Werte zugreifen.

Ich will das Servlet aber ebenso direkt im Browser aufrufen können und dort die Parameter anhängen, also so:
Java:
http://myserver/MyServlet?unwichtig=irgendwas&dataSource=wert1&dataSource=wert2

Hier wird aber IMMER nur der erste dataSource Parameter mitgegeben an das Servlet, d.h. als Länge wird hier auch immer nur 1 ausgegebn, und wie gesagt, ich kann dann nur auf den ersten dataSource-Wert zugreifen.
Warum funktioniert das nicht?
 
hast du beim funktionierenden Browser-Request mal den Original-ParamString angeschaut, etwa
request.getQueryString()
request.getRequestURI()
oder ähnliches?

wie sieht der aus, vielleicht musst du
Java:
htt p://myserver/MyServlet?unwichtig=irgendwas&dataSource[0]=wert1&dataSource[1]=wert2
angeben oder ähnlich komplexere Syntax
 
Hallo SlaterB,

danke für die schnelle Antwort.

Also wenn ich es via Formular aufrufe, dann sieht der Query-String so aus:
unwichtig=irgendwas&dataSource=blup&dataSource=asdf

Beim direkten Aufruf ebenfalls.

Das mit der anderen Syntax ist eine gute Idee, daran hatte ich noch gar nicht gedacht. Die Array Syntax hat aber leider nicht funktioniert, da kam dann gar nichts mehr an.

Was ich noch dazu sagen muss, ist, dass ich mich hier in keiner normalen Servlet-Umgebung befinde, sondern in einer Portal-Umgebung, was aber nichts daran ändert, dass das dennoch irgendwie funktionieren sollte, da ich hier ja auch nach dem J2EE-Standard programmiere (HttpServletRequest, etc.)
 
hmm, zu dumm, ich bin in dem Thema grad nicht drin, kann nichts testen, mir fällt auch keine passende google-Suche ein,
wär schon interessant zu analysieren, was bei den beiden Requests anders ist,
vielleicht gibt es noch weitere versteckte Parameter in der kompletten HTTP-Nachricht, kannst du dir die genauer anschauen?

ansonsten hast du wie du sagst beim direkten Aufruf immerhin den Querystring mit allen Infos, dort könntest du manuell die Parameter korrekt herausparsen,
keine schöne Vorstellung natürlich, mehr kann ich dazu leider nicht beitragen
 
Hallo SlaterB,

danke für die Hilfe, ich glaube du brauchst da gar nicht so wahnsinnig in dem Thema drin sein, denn das was du (und auch ich) geschrieben habe stimmt nämlich auch.

Hab mal ein bisschen tiefer gegraben und diverse Ausschlusstests gemacht... Also so wie ich es im Code habe, müsste es tatsächlich funktionieren. Und es funktioniert auch, nur in gewissen "Spezial"Fällen funktioniert es nicht. Wie ich schon erwähnte befinde ich mich in einer Portal-Umgebung (... von SAP ...), und hier kann ich dieses Servlet auch in eine Art Container einbetten, was zur Folge hat, dass End-User hier noch einige Personalisierungen für gewisse Einstellungen tätigen können. Ich kann das Servlet aber auch einfach direkt ohne diesen Container laufen lassen.

Wenn ich es direkt laufen lasse, funktioniert es. Ist es in diesem Container eingebettet (wie bei mir) funktioniert es nicht mehr, und man kriegt nur den ersten Parameterwert. Riecht daher stark nach einem Bug, es sei denn es gibt da tatsächlich eine besondere Aufrufsyntax. Da diese aber nicht dokumentiert ist, werde ich das mal als Produktfehler melden.
 

Zurück
Oben