25 Stimmen

Was wird von request.getParameter zurückgegeben?

// index.jsp

<form method="post" action="backend.jsp">
<input type="text" name="one" />
<input type="submit value="Submit" />
</form>

Was wird in backend.jsp von request.getParameter("one"); zurückgegeben?

request.getParameter("one").getClass().getName();

gibt java.lang.String zurück, also muss es ein String sein, richtig?

Das kann ich jedoch nicht tun

String one = request.getParameter("one");
if (!"".equals(one)) {}

oder

if (one != null) {}

Dies ist offensichtlich, da die Variable eins nicht null zurückgibt. Ist

if (one.length() > 0) {}

der einzige Weg, oder gibt es bessere Lösungen oder einen besseren Ansatz? Ich bin der Ansicht, beide Lösungen auf jsp sein. Mit einem Servlet (obwohl jsp ist ein Servlet) ist ein anderer Anwendungsfall in diesem Szenario.

1 Stimmen

Ich rate Ihnen, die Javadocs zu lesen, bevor Sie Fragen wie diese stellen. Das spart allen Beteiligten Zeit. In diesem speziellen Fall scheinen Sie Annahmen getroffen zu haben, die falsch sind und die durch das Lesen der Javadocs korrigiert worden wären.

1 Stimmen

Danke, dass Sie meine Absicht bekräftigen. Mit Ausnahme meines letzten Absatzes sage ich im Wesentlichen das Gleiche, d.h. ich lese die Javadoc, bevor ich einen Kommentar abgebe, damit die Leute nicht voreilig oder außerhalb des Problembereichs kommentieren. Ich wollte die Leute auf den dritten Absatz verweisen, wenn sie diese Grundlagen kennen. Ich habe es nicht direkt getan, sorry dafür. Prost!!

0 Stimmen

Warum sagen Sie, dass wir die beiden anderen Fälle nicht machen können?

41voto

ziesemer Punkte 26796

Gemäß der Javadoc :

Gibt den Wert eines Anfrageparameters als String zurück Parameter nicht existiert.

Beachten Sie, dass es möglich ist, einen leeren Parameter zu übermitteln, d. h. der Parameter existiert zwar, hat aber keinen Wert. Zum Beispiel könnte ich Folgendes angeben &log=&somethingElse in die URL einfügen, um die Protokollierung zu aktivieren, ohne dass die folgenden Angaben gemacht werden müssen &log=true . In diesem Fall ist der Wert ein leerer String ( "" ).

4voto

Arjun Nemical Punkte 47
String onevalue;   
if(request.getParameterMap().containsKey("one")!=false) 
{
onevalue=request.getParameter("one").toString();
}

2voto

jbindel Punkte 5367

Beide if (one.length() > 0) {} y if (!"".equals(one)) {} prüft auf einen leeren foo-Parameter, und ein leerer Parameter ist das, was man erhält, wenn das Formular ohne einen Wert in der foo Textfeld.

Wenn es eine Möglichkeit gibt, den Parameter mit der Expression Language zu behandeln, könnten Sie auf ihn zugreifen mit empty param.foo in einem Ausdruck.

<c:if test='${not empty param.foo}'>
    This page code gets rendered.
</c:if>

0 Stimmen

Danke, dass Sie mich daran erinnert haben. Das ist in der Tat eine nette Lösung (ich werde sie verwenden, wenn ich das Problem nicht auf meine Weise umgehen kann), aber ich war mehr daran interessiert zu erfahren, wie die Leute dieses Problem im traditionellen Sinne umgehen. Gibt es z.B. einige Fälle, in denen man den Code kompromittieren oder brechen könnte (z.B. NullPointerException), nur wenn man die Länge überprüft. Es gibt String zurück, aber habe ich etwas übersehen?

0 Stimmen

Sie könnten eine NullPointerException erhalten, wenn der <input> in Ihrem Formular fehlt, denn dann wäre der Parameter null.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X