Liste Object Löschen

Status
Nicht offen für weitere Antworten.

sence

Bekanntes Mitglied
Hallo,

ich schreibe gerade einen Warenkorb und realisiere die anzahl der Ausgewählten Produkte mit einer ArrayList.

Soweit so gut...

Wenn nun ein kunde ein Object aus dem Warenkorb löschen will, benutze ich den Iterator

in meinen Test beispielen funktioniert alles oO

Java:
package system;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

// Produkte setzten und in den Warenkorb
public class warenkorbInit extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public warenkorbInit() {
        super();
        // TODO Auto-generated constructor stub
    }


	@SuppressWarnings("unchecked")
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	String pid = request.getParameter("pid");
	String delPid = "";
	delPid = request.getParameter("delPid");
	HttpSession session = request.getSession(true);
	
	
	Object obj = session.getAttribute("pids");
	
	// Waren korb noch nicht vorhanden
	if(obj == null) {
		List<String> produkte = new ArrayList<String>();
		produkte.add(pid);
		session.setAttribute("pids", produkte);
		
		//erledigt, und in den Warenkorb wechseln
		String uri ="order/bestellung.jsp";
		String encodedUrl = response.encodeRedirectURL(uri);
		response.sendRedirect(encodedUrl);
	}else {
		// Bestehenden Warenkorb erweitern
		List<String> list = (ArrayList<String>) session.getAttribute("pids");	
	list.add(pid);
	session.setAttribute("pids", list);
	
	// erledigt, und in den Warenkorb wechseln
	String uri ="order/bestellung.jsp";
	String encodedUrl = response.encodeRedirectURL(uri);
	response.sendRedirect(encodedUrl);
	}
	
	// Löschung eines Produktes
		
		ArrayList<String> list3 = (ArrayList<String>) session.getAttribute("pids");
	    if(delPid.equals("") == false) {	
		for (Iterator iter = list3.iterator(); iter.hasNext();) {
	    		Object o = iter.next();	    		
	    		if(delPid.equals(o)) {
	    			iter.remove();
	    			}
		}
				
	    	// erledigt, und in den Warenkorb wechseln
	    	String uri ="order/bestellung.jsp";
	    	String encodedUrl = response.encodeRedirectURL(uri);
	    	response.encodeURL(encodedUrl);
	   }

			
}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

ich bekomme jedesmal eine Nullpointer, wenn ich nun ein Produkt eintrage (ab der stelle, wo das löschen definiert ist), das produkt eintragen selbst hat vor meiner lösch Bedingung einwandfrei funktioniert. nun will nichts mehr :/

danke!!!!!!
 
Zuletzt bearbeitet:
Fehler muss man bearbeiten, nicht nur Ausrufezeichen schreiben,

-------

wenn der Fehler übrigens schon beim 'Produkt eintragen' kommt, warum schreibst du dann oben
'Wenn nun ein kunde ein Object aus dem Warenkorb löschen will, benutze ich den Iterator'?

ist das Löschen erstmal nicht ganz egal, wenn das Einfügen nicht klappt?

--------

zum Eintragen: Tests und echte Ausführung sind manchmal zwei Paar Schuhe,
wichtig ist, die echte Ausführung zu analysieren,

aller erste Aufgabe ist das Bereitstellen von Logging oder Debugging, Logger, System.out.println, irgendwas vorhanden?
im Zweifel jede Meldung als Exception werfen, wenn du die NullpointerException siehst, dann muss das ja wenigstens funktionieren 😉

zweite Aufgabe: bei jedem Request erstmal Zustand der Session ausgeben,
gut, beim Einfügen ist das noch nicht so spannend, außer die Session wäre null,

dritte Aufgabe:
bei NullPointerExceptions ist nämlich generell das Problem, dass irgendwas null ist,
also: Zeile des Fehlers rausfinden und fragliche Objekte prüfen, ob sie null sind
 
Hey,

Also ein einfügen funktioniert ja ohne Probleme, auch das erweitern des Warenkorb funktioniert prima !

nur das löschen will er nicht.
Deshalb schrieb ich auch nur den Fehler beim Löschen :- )
 
das widerspricht vollkommen
> ich bekomme jedesmal eine Nullpointer, wenn ich so ein Produkt eintrage, also ich komme so gerade nicht mal mehr zum löschen
aber von mir aus,

nun gilt es besonders, die Session zu analysieren, ob da die Liste drin ist,
ansonsten genau das gleiche
 
Danke schonmal, da bin ich kräftig bei *g*

Also bevor ich die Lösch anweißung aufgenommen habe, funktionierte mein Vorhaben.
, produkt hinzufügen und die Liste erweitern.

Nachdem ich die Lösch Anweißung aufnahm, kann ich noch nicht mal mehr ein Produkt einfügen, da die Lösch anweißung einen Fehler macht.
Und zwar den Nullpointer bei der ü+berprüfung:

if(delPid.equals("") == false) {
Iterator holen und Objekt löschen
}
 
na gut, der Code zum Löschen sollte bei einem Einfüge-Vorgang auch nicht unbedingt ausgeführt werden,
wie wärs mit verschiedenen Servlets?

oder hier ganz simpel, wie man aus der Fehlermeldung auch erahnen könnte:

if (delPid != null) {
// alles zum Löschen
} else {
// sonst nix zu löschen
}
 
Schau mal, hab es jetzt so, aber bekomme trotzdem nen fehler, bzw es wird das Objekt nicht gelöscht, und irgendwie verdoppelt sich gerade ein produkt, wenn ich das andere kille. Als würde es an dessen Stelle springen oO

Java:
package system;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

// Produkte setzten und in den Warenkorb
public class warenkorbInit extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public warenkorbInit() {
        super();
        // TODO Auto-generated constructor stub
    }


	@SuppressWarnings("unchecked")
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	String pid = request.getParameter("pid");
	String del = request.getParameter("del");
	
	HttpSession session = request.getSession(true);
	session.setAttribute("test", del);
	
	List<String> list = (ArrayList<String>) session.getAttribute("pids");
	
	if(list != null) {
	for(Iterator it = list.iterator(); it.hasNext();) {
	Object s = it.next();
		if(s.equals(del)) {		
		it.remove();
		String uri ="order/bestellung.jsp";
		String encodedUrl = response.encodeRedirectURL(uri);
		response.sendRedirect(encodedUrl);
		}else {
			// kaffee trinken
		}
	}	
	}else {
		// kaffee trinken
	}
	// Waren korb noch nicht vorhanden
	if(pid.length() != 0) {	
	if(list == null) {	
		list = new ArrayList<String>();
		list.add(pid);
		session.setAttribute("pids", list);
		
		//erledigt, und in den Warenkorb wechseln
		String uri ="order/bestellung.jsp";
		String encodedUrl = response.encodeRedirectURL(uri);
		response.sendRedirect(encodedUrl);
	}else {
		
		// Bestehenden Warenkorb erweitern
		list.add(pid);	
		session.setAttribute("pids", list);
		
	// erledigt, und in den Warenkorb wechseln
	String uri ="order/bestellung.jsp";
	String encodedUrl = response.encodeRedirectURL(uri);
	response.sendRedirect(encodedUrl);
	}
	}

}
	

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

Vielen Dank!
 
was deine Request für Parameter-Kombinationen bringen, mag ich nicht erahnen,
Logging Logging Logging,

am Ende solltest du dann zu jedem Request eine Ausgabe wie folgt erhalten:

> Request in warenkorbInit, Wert für pid = .., Wert für del = ..
> Liste in der Session war vorher null/ folgende Werte ..

und auch die einzelnen Aktionen mit ihren Bedingungen loggst du, z.B.

> list ist da, durchlaufe Liste hinsichtlich Löschen
> Objekt x = .., kein del
..
> Objekt x = .., lösche nun

> pid ist da, füge es nun ein,
> neue Liste = ..

am Ende kommt noch

> leite nun weiter an JSP ..

wenn du derartiges Logging verwendest, sieht du genau was passiert und auch ob z.B. zwei Dinge gleichzeitig ablaufen,
ich werde es nicht mehr einzeln anschauen, wobei ich mutmaßen müsste, ob nun pid und del gleichzeitig gesetzt sind
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben