JSF JSF Selected Item & GesBetrag Problem

Nekromencer

Neues Mitglied
Schönen guten Tag,
ich muss für die FH ein Verkaufssystem im Internet erstellen. Dabei verwende ich JSF 2.1 Tomcat v.7 und MYSQL Datenbank.
Soweit funktioniert auch nach einiger Arbeit alles wie gehofft. Nun sind mir allerdigs 2 Probleme aufgetreten, wo ich den Fehler überhaupt nicht verstehen kann und der Debugger auch nicht sonderlich viel Aufschluss(für mich) bringen konnte.
Mein Problem liegt bei einem Script des Warenkorbs.
Warenkorb.java
Java:
package testmodule;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import model.Produkte;
@ManagedBean
@SessionScoped
public class Warenkorb {
    private Produkte[] ausgew = new Produkte[100];
    private int[] anzware = new int[100];
    private int anzausgew;
    private WarenkorbBean[] wkb=new WarenkorbBean[100];
    private WarenkorbBean selectedWarenkorbItem = new WarenkorbBean();
    public Produkte[] getAusgew() {
        return ausgew;
    }
    public void setAusgew(Produkte[] ausgew) {
        this.ausgew = ausgew;
    }
    public int[] getAnzware() {
        return anzware;
    }
    public void setAnzware(int[] anzware) {
        this.anzware = anzware;
    }
    public Warenkorb() {
    }
    public void addselectedProdukt(Produkte selected) {
        if (ausgew[selected.getArt_nr()] == null) {
            anzware[selected.getArt_nr()]++;
            ausgew[selected.getArt_nr()]=selected;
        } else {
            anzware[selected.getArt_nr()]++;
        }
        anzausgew++;
        wkb[selected.getArt_nr()]=new WarenkorbBean(ausgew[selected.getArt_nr()],anzware[selected.getArt_nr()]);
    }
    public WarenkorbBean[] getWkb() {
        return wkb;
    }
    public void setWkb(WarenkorbBean[] wkb) {
        this.wkb = wkb;
    }
    public int getAnzausgew() {
        return anzausgew;
    }
    public void setAnzausgew(int anzausgew) {
        this.anzausgew = anzausgew;
    }
    public WarenkorbBean getSelectedWarenkorbItem() {
        return selectedWarenkorbItem;
    }
    public void setSelectedWarenkorbItem(WarenkorbBean selectedWarenkorbItem) {
        this.selectedWarenkorbItem = selectedWarenkorbItem;
    }
    public void warenkorbleeren()
    {
        anzware = new int[100];
        ausgew = new Produkte[100];
        wkb=new WarenkorbBean[100];
        anzausgew=0;
    }
    private int anzinit()
    {
        int anzahl = 0;
        for(int i=0;i<wkb.length;i++)
        {
            if(wkb[i]!=null)
            anzahl+=wkb[i].getAnzahl();
        }
        return anzahl;
    }
    public void deleteselectedItem()
    {
        System.out.println(selectedWarenkorbItem.getKreuz());
        anzware[this.selectedWarenkorbItem.getProdukt().getArt_nr()]=0;
        anzausgew=anzinit();
        wkb[this.selectedWarenkorbItem.getProdukt().getArt_nr()]= null;
        ausgew[this.selectedWarenkorbItem.getProdukt().getArt_nr()]=null;
    }
}
Warenkorb.xhtml
Code:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
    <p:panel header="Warenkorb">
        <p:graphicImage id="img" value="/images/warenkorb.png" width="50"
            height="50" title="Warenkorb" onclick="PF('dlg1').show();" />
            <p:tooltip for="img"><p:outputLabel value="onclick Warenkorb dialog"/></p:tooltip>
            <p:outputLabel value="#{produkteBean.wk.anzausgew} Artikel in dem Warenkorb"/>
        <p:commandButton action="#{produkteBean.wk.warenkorbleeren}" update=":rootContainer" value="Warenkorb leeren"/>
    </p:panel>
<p:dialog header="Basic Dialog" widgetVar="dlg1" minHeight="40">
    <p:dataList value="#{produkteBean.wk.wkb}" var="pr" type="definition">
            <f:facet name="header">
                Ausgewählte Produkte:
            </f:facet>
            <p:column>
                <p>
                    <p:graphicImage value="/images/Produkte/#{pr.produkt.imagefile}.gif" />
                       <p:outputLabel value="  #{pr.produkt.produktname}"/>
                       <p:commandButton value="#{pr.kreuz}" update=":rootContainer"  action="#{produkteBean.wk.deleteselectedItem()}" rendered="#{not empty pr.kreuz}">
                       <f:setPropertyActionListener value="#{pr}"
                        target="#{warenkorb.selectedWarenkorbItem}"/>
                    </p:commandButton>
                </p>
                   <p>
                       <p:outputLabel value="#{pr.formatanzahl}       #{pr.formatpreis}"/>
                   </p>
                   </p:column>
            </p:dataList>
</p:dialog>
</ui:composition>
WarenkorbBean.java
Java:
package testmodule;
import model.Produkte;
public class WarenkorbBean {
    private Produkte produkt = new Produkte();
    private int anzahl;
    private float gesBetrag;
    private String formatanzahl;
    private String formatpreis;
    private String formgesBetrag;
    private String kreuz;
   
    public WarenkorbBean()
    {
       
    }
   
    public WarenkorbBean(Produkte pr, int anz) {
        this.produkt = pr;
        this.anzahl = anz;
        gesBetrag+=pr.getPreis();
        formatanzahl=formanzahl();
        formatpreis=formpreis();
        formgesBetrag=formatgesBetrag();
        setKreuz("X");
       
    }
    public String formatgesBetrag()
    {
        return "Gesamtbetrag: " + gesBetrag + "€";
    }
    public String formanzahl()
    {
        return "Anzahl:" + anzahl + "x";
    }
    public String formpreis()
    {
        return "Preis:" + produkt.getPreis() + "€";
    }
    public Produkte getProdukt() {
        return produkt;
    }
    public void setProdukt(Produkte produkt) {
        this.produkt = produkt;
    }
    public int getAnzahl() {
        return anzahl;
    }
    public void setAnzahl(int anzahl) {
        this.anzahl = anzahl;
    }
    public String getFormatpreis() {
        return formatpreis;
    }
    public void setFormatpreis(String formatpreis) {
        this.formatpreis = formatpreis;
    }
    public String getFormatanzahl() {
        return formatanzahl;
    }
    public void setFormatanzahl(String formatanzahl) {
        this.formatanzahl = formatanzahl;
    }
    public float getGesBetrag() {
        return gesBetrag;
    }
    public void setGesBetrag(float gesBetrag) {
        this.gesBetrag = gesBetrag;
    }
    public String getFormgesBetrag() {
        return formgesBetrag;
    }
    public void setFormgesBetrag(String formgesBetrag) {
        this.formgesBetrag = formgesBetrag;
    }
    public String getKreuz() {
        return kreuz;
    }
    public void setKreuz(String kreuz) {
        this.kreuz = kreuz;
    }
}
Mein erstes Problem liegt bei dem Gesamtbetrag. Wenn ich diesen Betrag abfrage zeigt er mir im Debugger die richtige Ausgabe. Aber wenn ich auf F8 drücke um den Debugger durchlaufen zu lassen gibt er trotzdem nichts aus. :-/ Dieses Problem ist allerdings ein Schönheitsfehler und kann zur Not auch rausgelassen werden. Das größte Problem habe ich bei der Übergabe des Selected Items. Anfangs funktionierte es perfekt alle Items wurden gelöscht, die gelöscht werden sollten. Da fiel mir der Fehler auf... die Anzahl der Ausgewählten Objekte stimmt nicht mehr. Also habe ich ein paar Routinen ergänzt, welche nicht zu einem Fehler führen dürften...
Java:
    private int anzinit()
    {
        int anzahl = 0;
        for(int i=0;i<wkb.length;i++)
        {
            if(wkb[i]!=null)
            anzahl+=wkb[i].getAnzahl();
        }
        return anzahl;
    }
    public void deleteselectedItem()
    {
        System.out.println(selectedWarenkorbItem.getKreuz());
        anzware[this.selectedWarenkorbItem.getProdukt().getArt_nr()]=0;
        anzausgew=anzinit();
        wkb[this.selectedWarenkorbItem.getProdukt().getArt_nr()]= null;
        ausgew[this.selectedWarenkorbItem.getProdukt().getArt_nr()]=null;
    }
}
Alles ausser wkb[this.selectedWarenkorbItem.getProdukt().getArt_nr()]= null; hatte ich ergänzt.
Was ich beim Debuggen herausgefunden habe... er übergibt die Daten richtig aber negiert sie schlussendlich auch wieder. Bin mir auch nicht so sicher bei der Wahl des Commandbuttons für die SelectedItems:
Action, onClick oder onComplete
Ich hoffe ihr könnt mir ein bisschen weiterhelfen. Werde in der Zeit dann auch weiter selber nach dem Fehler suchen.
 

Nekromencer

Neues Mitglied
Ich habe den Fehler gefunden. Schade, dass mir keiner helfen konnte. Aber der Fehler ist so Banal, dass ich hoffe, dass andere Benutzer von meiner Dummheit lernen können. Schaut euch mal meinen Code genau an. Ich habe die Übergabevariable über die Klasse Warenkorb.selected* instanziert und die Funktion über die Klasse ProduktBean... darum konnte er die Variable nicht weitergeben.
 

Neue Themen


Oben