Wie die post eine Reihe von versteckten Feldern ein servlet?
<form>
<c:forEach var="cartitems" items="${cart.items}">
<input type="hidden" name="productid[]" value="${cartitems.products.productsId}">
</c:forEach>
</form>
Obige code erzeugt HTML-code, wie
<input type="hidden" value="1" name="productid[]">
<input type="hidden" value="5" name="productid[]">
Wie erhalte ich Zugriff auf diese Werte in der servlet, somthing, die ich habe versucht, aber es funktioniert nicht:
String[] productsids = request.getParameterValues("productid");
for(String eachpro : productsids){
out.println("Product values : "+eachpro);
}
Gibt es eine andere Möglichkeit, diese Arbeit zu tun
- Die Obige code generiert, mit welchem HTML-code?
- Bitte finden Sie in den aktualisierten Frage.
- Schließen Sie Ihre
<input />
Felder ordnungsgemäß, wenn Sie tun es nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist absolut kein problem mit immer das versteckte input-Elemente " Werte als ein array in
doPost()
Methode mitrequest.getParameterValues()
.Aber in Ihrem Beispiel haben Sie einen Fehler: für deinen versteckten Eingang Sie eingestellt haben
name="productid[]"
, aber beim abrufen der Werte, die Sie verwendetrequest.getParameterValues("productid")
;d.h. ohne index-operator
[]
am Ende.Ich habe gerade getestet immer mehrere versteckte Werte aufgefüllt mit
<c:forEach>
auf meinem Rechner und ich bin immer alle versteckt Ergebnisse in derdoPost()
Methode mit`request.getParameterValues("productid[]")
ohne Probleme.Also einfach alles prüfen, es scheint, dass Sie etwas falsch machen irgendwo.
Ein paar unzusammenhängende Notizen über Namenskonventionen
In der Java web Entwicklung, im Gegensatz zu PHP, es ist nicht üblich zu verwenden-index
Betreiber
[]
am Ende des namens für eininput
oder eine beliebige HTMLelement innerhalb JSP, wie Sie es für
productid[]
, obwohl es gut funktioniert. So geben Sie einen Namen für Ihre versteckten input-element wie<input type="hidden" name="productId" value="123" />
würde natürlicher sein,/gemeinsam. Aber wieder, es ist Ihrer Wahl.
In
<c:forEach>
tag, es wäre viel intuitiver zu gebenWert für die
var
Attribut mit singular, plus verwenden camelCasewäre auch mehr Java Weg, wie
<c:forEach var="cartItem" items="${cart.items}">
request.getParameterValues()
als ein array. Wieder, wie in Ihrem Fall:<input type="hidden" name="productId" value="1" /> <input type="hidden" name="productId" value="2" />
und dann indoPost()
Methode retieve Sie:String[] productIds = request.getParameterValues("productId");
Entfernen Sie den index aus dem Feld name der Input-Tag & verwenden die gleichen in der getParameterValues auf der server-Seite. Der name des Parameters sollte identisch sein zum abrufen der Werte eines Feldes auf der server-Seite.
(Ändern Sie den Namen der Eingabe von
productid[]
zu "productid
)[]
spielt keine Rolle:request.getParameterValues("productid[]")
gut funktioniert, obwohl es ist nicht üblich, in Java web Entwicklung zu geben, die solche Namen für die HTLM-Elemente, es ist mehr PHP-Weg.