# getParameter("id") = null - warum?



## Thaflasher (14. Dez 2011)

Hi Forum,

ich arbeite gerade an einem Servlet das mir mein Dateisystem darstellt. Funktioniert auch soweit und ich bekomme alle Verzeichnisse und Dateien angezeigt.

Damit ich aber auch in den jeweiligen Ordner hinein kann bzw. die jeweilige Datei laden kann, benötige ich einen "Öffnen" bzw. "Laden" Button neben der jeweiligen Datei bzw. Verzeichnis.

Da ich eine ArrayList für die Dateinamen und eine für die Verzeichnisse ist die Sache mit 2 Schleifen auch schnell erledigt.

Hier z.B. die Schleife für die Verzeichnisse:


```
for (int i = 0; i < directoryList.size(); i++) {
				id=i;
				out.write("<tr>");
				out.write("<td><img src="+'"'+ "mypicture.jpg"+'"' + " alt=mypicture</img>");
				out.write("<td>"+directoryList.get(i)+"</td>");
				out.write("<td><input type=submit id=d"+id+" name=open  value=&Ouml;ffnen ></td>");
				out.write("</tr>");
			}
```

Damit ich feststellen kann welcher Button gedrückt wurde habe ich in das input eine id gesteckt, das sollte mir das suchen ersparen -> das "d" steht für "directory" und die id erhöht sich mit den Schleifendurchläufen.

Schließlich um den Dateipfad zu erneuern:


```
String open = request.getParameter("open");

if(open!=null){
directory= directory + directoryList.get(Integer.valueOf(request.getParameter("id")));
}
```

Warum bekomme ich für die "id" immer null? Bei 5 gleich lautenden open-Button stellt er ja auch fest, dass eines davon betätigt wurde. Wenn ich jetzt bei dem "name"-Parameter die id hinzufügen muss, und dann "name0" bis "name1000" durchsuchen muss, ob irgend eines nicht null ist, kommt mir das etwas performance lastig vor.

Hat jemand eine Idee? ???:L

Danke


----------



## mjustin (14. Dez 2011)

"id" ist kein Parameter, sondern nur ein weiteres Attribut des input-Elements.

Welche Parameter im Request enthalten sind kann man über die ParameterMap ermitteln.

Auf diesem Weg könnte man auch das Problem lösen, indem der Name (statt der ID) des Parameters variabel erzeugt wird, und dann im Servlet die ParameterMap alle Parameter durchsucht.


----------



## fastjack (15. Dez 2011)

Warum packst Du die inputs nicht in ein form?


----------



## Thaflasher (19. Dez 2011)

Okay habs nun mit einem variablen Namen gelöst:


```
String attname = null;
		
		for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
			attname = (String) e.nextElement();
		}
```

das gibt mir alle Parameter bzw. in meinem Falle genau 1nen (den angekickten) 

dann Listenindex herausfinden:


```
if(attname!=null){
			if(attname.contains("open")){				
				int index = Integer.valueOf(attname.substring(4)); //open hat 4 chars -> ab stelle 4 steht dann meine id
				directory = directory + directoryList.get(index)+"/";
			}
}
```

Funktioniert wunderbar!

Danke an alle für die Denkanstöße


----------



## 5474n (20. Jan 2012)

Hallo, 
habe ein sehr ähnliches Problem!
Erstelle eine CD-Verwaltung mit Servlets (sagt meine Aufgabe so)
habe meine Textfelder in der Methode:


```
protected void oberflaeche(HttpServletRequest rquest, HttpServletResponse response)
		throws ServletException, IOException
	{

		PrintWriter out = response.getWriter();
		out.println("<form METHOD=POST>\n"
			+ "Bitte füllen Sie die folgenden Eingabefelder aus.<br><br>");
		DatenVector.DatenStaender.setSize(50);
		out.println("Fach:\n"
			+ "<input type=\"text\" size=\"2\" maxlength=\"2\" name=\"fachangabe:\">\n"

			+ "Interpret:\n"
			+ "<input type=\"text\" size=\"30\" maxlength=\"25\" name=\"interpret\"><br>\n"

			+ "Titel:\n"
			+ "<input type=\"text\" size=\"30\" maxlength=\"25\" name=\"titel\"><br>\n"

			+ "Kategorie:\n"
			+ "<select name=\"kategorie\">\n"
			+ "<option value=\"Klassik\">Klassik</option>\n"
			+ "<option value=\"Pop\">Pop</option>\n"
			+ "<option value=\"Rock\">Rock</option>\n"
			+ "<option value=\"Techno\">Techno</option>\n"
			+ "</select><br>\n"

			+ ("Kaufdatum:\n"
				+ "<input type=\"text\" size=\"30\" maxlength=\"25\" name=\"kaufdatum:\">\n")

			+ "<input type=SUBMIT value=\"Speichern\">\n" + "</form>\n");
	}
}
```

anschließend rufe ich ja mit dem Button "Speichern" meine doPost Methode auf.
In dieser möchte ich nun meine Eingaben in ein zuvor angelegtes Objekt abspeichern lassen.


```
protected void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException
	{
		DatenVector.DatenStaender.setSize(50);
		PrintWriter out = response.getWriter();
		int ikontrolle = DatenVector.kontrolle();


		
		try
		{
			String fachangabe = request.getParameter("fachangabe");
			
			int iFachangabe = Integer.parseInt(fachangabe);

			String interpret = request.getParameter("interpret");

			String titel = request.getParameter("titel");

			String kategorie = request.getParameter("kategorie");

			String kaufdatum = request.getParameter("kaufdatum");

			Traeger neuDt;
			if (ikontrolle != 0)
			{

				neuDt = new Traeger(); 
				neuDt.setiFachangabe(iFachangabe);
				neuDt.setsInterpret(interpret);
				neuDt.setsTitel(titel);
				neuDt.setsGenre(kategorie);
				neuDt.setsKaufdatum(kaufdatum);
				DatenVector.DatenStaender.setElementAt(neuDt, iFachangabe);

			}
		}
		catch (Exception ex)
		{
			if (ex.getMessage().equals("null"))
			{
				out.println("Nullpointer Exception. Schwerwiegender Fehler");
			}
			else
			{
			}
		}
		

	}
```

funktionier das schon mit 
	
	
	
	





```
request.getParameter("")
```
 ?

danke im Vorraus


----------



## ARadauer (20. Jan 2012)

Mhn ja das wär der Sinn der Sache.


----------



## 5474n (20. Jan 2012)

bekomme aber bei allen 
	
	
	
	





```
getParameter("")
```
 nur 
	
	
	
	





```
null
```
 zurückgegeben.
was muss ich ändern, beachten?


----------



## nillehammer (20. Jan 2012)

Warum Du bei allen Parametern null zurück bekommst, sehe ich jetzt nicht. Aber in einigen Fällen hast Du einen kleinen Schreibfehler drinnen. Im generierten Html hast du den ":" (Doppelpunkt) mit im name-Attribut (bei fachangabe und kaufdatum). Bei den getParameter()s aber nicht.

Für's Debugging kannst Du mal über das Ergebnis von getParameterNames() iterieren und mit Sysout.println oder Log-Statement mal schauen, was da überhaupt bei dem Servlet ankommt.


----------



## 5474n (20. Jan 2012)

Es lag an den Rechtschreibfehlern:autsch:, habe die Doppelpunke entfernt und nun funktioniert das Speichern ohne Probleme!!
:applaus: für nillehammer
habe noch so viel ausprobiert und zu keinem Ergebnis gekommen.
Fazit und Merke: Augen richtig öffnen, kann helfen!


----------

