einen Warenkorb implementieren

cmtran

Mitglied
Hallo Gemeinde,

für meine webapp, die auf spring mvc basiert, möchte ich kleines einfaches Webshop bauen. Das Shop bietet nur eine kleine Menge von Produkten in einer einfachen Kategoriestruktur. Besucher können Produkte auswählen und die Bestellungen werden an die Email des Shop-Betreibers geschickt. Die Anzeige der Produkte in Kategorien sollte kein Problem sein. Ich möchte aktuell wissen, wie man einen Warenkorb implementiert. Also Standardstruktur für den Aufbau. Was muss man beachten? Wie werden die selektierten Produkte ermittelt, wenn der Besucher auf Bestellen klickt, usw.

Kennt jemand Tutorials oder Opensource-Lösung dafür?

Vielen Dank für jede Information.
 

eMmiE

Bekanntes Mitglied
???
Wenn du deinen eigenen Webshop programmieren willst, dann musst du die das doch alles selbst zusammenstecken, oder?
Wo ist dann das Problem dabei, dieselben Daten, die du auf die Seiten lädst auch beim Aufrufen der Seite "Warenkorb" so zu übertragen, das alle vorher ausgewählten Produkte (-> Hintergrundarray) mit Stückzahlen angezeigt werden?

Gruß :bahnhof: eMmiE
 

Peter-Rene

Mitglied
Normalerweise sind Warenkörbe wie folgt implementiert:
Die Bestellungen werden in Cookies gespeichert.
Einfach mit dem Hintergrund: Der Benutzer muss sich nicht erst anmelden, bevor er den Einkauf beginnen kann.
Hat er sich bereits registiert, kannst Du die Bestellungen natürlich auch per JPA in einer Tabelle "Bestellung" speichern.
Sobald der Benutzer "zur Kasse geht", muss er sich in jedem Fall anmmelden, damit seine Rechnungsdaten vorliegen.
Spätestens dann muss auch die Bestellung gespeichert werden.
Auf der GUI - Seite wird oft mit JS gearbeitet. Dazu schreibt man sich ein kleines Widget.
Damit die Seite beim Klick auf "In den Warenkorb" nicht neu geladen werden muss.
Hier gibt es verschiedene Herangehensweisen:
Der Klick auf "In den Warenkorb" löst zwei Aktionen aus:
1. Einen Ajax - Request zum Server mit einer BestellungsID und den Bestellungsangaben
2. Das Aktualisieren des Warenkorbes
bsw. über das Triggern eines Ajax, der PPR ermöglicht und nur den HTML Code für den Warenkorb aktualisiert
Oder:
Reines JS zum Aktualisieren des Warenkorbes client - seitig.
Ersteren Ansatz finde ich persönlich sauberer, aber er erzeugt auch den Overhead zweier unnötiger HTTP - Requests.
Da Du aus JS auch auf Cookies zugreifen kannst, sind die nicht wirklich notwendig.
Dafür hast Du beim ersten Ansatz die Möglichkeit, die Daten für Statistiken auszuwerten, während die beim zweiten ja nur auf dem Server landen, wenn es zu einer Bestellung kommt.
 
Zuletzt bearbeitet:

Spitfire777

Bekanntes Mitglied
Geht mit CDI extrem easy, bin mir aber nicht sicher, ob dir das mit Spring weiterhilft. Hab aber so bisher immer meine Java-Warenkörbe implementiert.

Dein Warenkorb-Bean mit @ConversationScoped annotieren. Der Rest wird dir komplett durch CDI abgenommen. Zum Beenden der Conversation kannst du dir die aktuelle Conversation jederzeit injezieren und mittels end() beenden oder mit begin() eine neue starten.

Das Binden an eine Session würde ich nicht empfehlen, da eine Session unter Umständen mehrere Warenkörbe haben kann (wenn auch meistens zeitlich versetzt) und das Auseinanderhalten und die Kontrolle über den Lifecycle nur unnötige Frickelei und eine mögliche zukünftige Bug-Quelle ist, wenns nicht gut gemacht ist.

Falls du es selber implementieren musst bzw. CDI nicht nutzen kannst, @ConversationScoped funktioniert so:
  • Über die URL wird eine Conversation-ID mitgeschickt, die nur für eine bestimmte Session gültig ist.
  • Das Warenkorb-Bean wird an die Conversation-ID gebunden.
  • Wird der Warenkorb gelöscht oder die Bestellung aufgegeben, wird die Conversation-ID als ungültig erklärt - Eine neue Conversation wird gestartet und somit ein neuer, leerer Warenkorb erzeugt.

Ansonsten bliebe natürlich noch, dass sich der Browser um den Warenkorb kümmert. Ist aber auf der Serverseite imho sicherer aufgehoben, vor allem wenn man den Browser mal versehentlich beendet und der ganze Warenkorb hin ist.
 
Zuletzt bearbeitet:

cmtran

Mitglied
Geht mit CDI extrem easy, bin mir aber nicht sicher, ob dir das mit Spring weiterhilft. Hab aber so bisher immer meine Java-Warenkörbe implementiert.

Dein Warenkorb-Bean mit @ConversationScoped annotieren. Der Rest wird dir komplett durch CDI abgenommen. Zum Beenden der Conversation kannst du dir die aktuelle Conversation jederzeit injezieren und mittels end() beenden oder mit begin() eine neue starten.

Das Binden an eine Session würde ich nicht empfehlen, da eine Session unter Umständen mehrere Warenkörbe haben kann (wenn auch meistens zeitlich versetzt) und das Auseinanderhalten und die Kontrolle über den Lifecycle nur unnötige Frickelei und eine mögliche zukünftige Bug-Quelle ist, wenns nicht gut gemacht ist.

Falls du es selber implementieren musst bzw. CDI nicht nutzen kannst, @ConversationScoped funktioniert so:
  • Über die URL wird eine Conversation-ID mitgeschickt, die nur für eine bestimmte Session gültig ist.
  • Das Warenkorb-Bean wird an die Conversation-ID gebunden.
  • Wird der Warenkorb gelöscht oder die Bestellung aufgegeben, wird die Conversation-ID als ungültig erklärt - Eine neue Conversation wird gestartet und somit ein neuer, leerer Warenkorb erzeugt.

Ansonsten bliebe natürlich noch, dass sich der Browser um den Warenkorb kümmert. Ist aber auf der Serverseite imho sicherer aufgehoben, vor allem wenn man den Browser mal versehentlich beendet und der ganze Warenkorb hin ist.

ich denke Spring unterstützt auch ConversationScoped, oder? Das werde ich auf jeden Fall noch anschauen. Ist für mich sehr interessant.

Ich möchte die Aktion "Add To Cart" durch jQuery realisieren, weil ich finde es langsam, wenn jede "Add to Cart" Aktion eine Post-Request an Server schickt und den Java-Warenkorb aktualisiert. Meine Idee ist Folgendes. In dem Warenkorb gibt es ein Input-Hidden-Feld id="selectedProductAmount". Jedes Mal wenn der Kunde auf den Button "Add to Cart" klickt, wird das Input-Hidden-Feld durch jQuery aktualisiert, mit der Id des Produkt und die Anzahl. z.B. "1-2; 2-3;...". Nachdem der Kunde alle seiner gewünschten Produkte ausgewählt hat, klickt er auf "zur Kasse". Jetzt wird eine Post-Request an den Server schickt.

Ist das eine gute Idee?
 

cmtran

Mitglied
Normalerweise sind Warenkörbe wie folgt implementiert:
Die Bestellungen werden in Cookies gespeichert.
Einfach mit dem Hintergrund: Der Benutzer muss sich nicht erst anmelden, bevor er den Einkauf beginnen kann.
Hat er sich bereits registiert, kannst Du die Bestellungen natürlich auch per JPA in einer Tabelle "Bestellung" speichern.
Sobald der Benutzer "zur Kasse geht", muss er sich in jedem Fall anmmelden, damit seine Rechnungsdaten vorliegen.
Spätestens dann muss auch die Bestellung gespeichert werden.
Auf der GUI - Seite wird oft mit JS gearbeitet. Dazu schreibt man sich ein kleines Widget.
Damit die Seite beim Klick auf "In den Warenkorb" nicht neu geladen werden muss.
Hier gibt es verschiedene Herangehensweisen:
Der Klick auf "In den Warenkorb" löst zwei Aktionen aus:
1. Einen Ajax - Request zum Server mit einer BestellungsID und den Bestellungsangaben
2. Das Aktualisieren des Warenkorbes
bsw. über das Triggern eines Ajax, der PPR ermöglicht und nur den HTML Code für den Warenkorb aktualisiert
Oder:
Reines JS zum Aktualisieren des Warenkorbes client - seitig.
Ersteren Ansatz finde ich persönlich sauberer, aber er erzeugt auch den Overhead zweier unnötiger HTTP - Requests.
Da Du aus JS auch auf Cookies zugreifen kannst, sind die nicht wirklich notwendig.
Dafür hast Du beim ersten Ansatz die Möglichkeit, die Daten für Statistiken auszuwerten, während die beim zweiten ja nur auf dem Server landen, wenn es zu einer Bestellung kommt.

vielen Dank für deine Antwort. Ich habe noch keine Erfahrung mit Cookies. Wo finde ich die besten Tutorials bezüglich Cookies und Warenkorb? Aktuell schaue ich simplecartjs.com an, wie man einen Warenkorb mit jQuery implementiert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
pkm Gibt es einen Redirect von der Tomcatstartseite auf ein Projekt? Allgemeines EE 4
E Wie kann ich über einen Suchfeld in Java Server Pages nach Datenbankinhalten suchen? Allgemeines EE 11
L JSP: Dynamischer Content mit Beans für einen Konfigurator? Allgemeines EE 0
T "normales" Java Programm auf einen Server laufen lassen Allgemeines EE 3
A Servletproblem.brauche dringend einen Rat Allgemeines EE 4
M Mehrere Webanwendungen über einen Webserver? Allgemeines EE 2
B JSF - Servlet mit Parametern über einen Link öffnen Allgemeines EE 3
G in JSF einen String ausgeben Allgemeines EE 5
W Eine Form an einen fremden Server schicken. Allgemeines EE 3
P Einen TimerTask automatisch aufrufen Allgemeines EE 4
D Bekomme DAten von einen Jsp nicht in den Tag Handler Allgemeines EE 2
H Hilfe! Wie erstelle ich einen Interceptor unter jBoss? Allgemeines EE 3
J JSF: Authentifizierung für einen einzigen Fall "umgehen Allgemeines EE 6
A IE gibt bei jedem Button einen Requestparameter Allgemeines EE 2
L Wie bekomme ich denn einen Zugriff auf die EJB ??? Allgemeines EE 7
C Warenkorb Tutorial Allgemeines EE 1
N Warenkorb ohne Datenbank Allgemeines EE 2
L RestServer und Service manuell implementieren Allgemeines EE 11
F Serverdienst in Tomcat implementieren Allgemeines EE 14
M mit Hibernate 1:n in view richtige implementieren Allgemeines EE 3

Ähnliche Java Themen


Oben