The problem is in :  TextField quantita = new TextField("quantita",
quantitaMOD);
replace quantitaMOD with something that is associated somehow with the
currently iterated cheese object
e.g. new PropertyModel(cheese, "quantity")


On Mon, Apr 11, 2011 at 12:47 PM, Paolo <[email protected]> wrote:

> Hi,
> It is my first experience with Wicket.
> I try to do a e-commerce site, based on cheese shop from Wicket in Action
> Book.
> I have problem to implement shopping cart to set the quantity of each item
> that the user choose.
> As you can see in this screenshot, I put a TextField for quantity in a
> ListView of all items that the user put in the shopping cart.
> At beginning all quantity value are set to 1.
> The problem is that it works correctly only if I have only one item. If I
> have two or more items, I can set correctly only the last quantity.
> Foe example, If I try to set quantity of the first item, the value that
> will be assigned to it will be the value of the last item.
> Thank you for help!
>
> http://sacredspirit.altervista.org/images/screenshot.jpg
>
> QuantFUORI=1
> QuantFUORI=1
> QuantSTR=1
> QuantFORM=2
> Quantity Value changed
> QuantFUORI=1
> QuantFUORI=2
> QuantSTR=1
> QuantFORM=2
> Quantity Value changed
> QuantFUORI=2
> QuantFUORI=2
>
> This is the complete source code of Checkout.java
>
> package org.wicket.example.pages;
>
> import au.com.bytecode.opencsv.CSVReader;
> import au.com.bytecode.opencsv.CSVWriter;
>
> import java.io.IOException;
> import java.io.Serializable;
> import java.text.NumberFormat;
>
> import java.io.Serializable;
> import java.text.NumberFormat;
> import java.util.ArrayList;
> import java.util.Arrays;
> import java.util.Collections;
> import java.util.List;
> import java.util.Properties;
>
> import javax.mail.Message;
> import javax.mail.Session;
> import javax.mail.Transport;
> import javax.mail.internet.InternetAddress;
> import javax.mail.internet.MimeMessage;
>
> import org.apache.wicket.AttributeModifier;
> import org.apache.wicket.PageParameters;
> import org.apache.wicket.markup.html.WebMarkupContainer;
> import org.apache.wicket.markup.html.basic.Label;
> import org.apache.wicket.markup.html.link.ExternalLink;
> import org.apache.wicket.markup.html.link.Link;
> import org.apache.wicket.markup.html.list.ListItem;
> import org.apache.wicket.markup.html.list.ListView;
> import org.apache.wicket.markup.html.list.PageableListView;
> import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
> import org.apache.wicket.model.AbstractReadOnlyModel;
> import org.apache.wicket.model.Model;
> import org.apache.wicket.model.PropertyModel;
> import org.apache.wicket.ResourceReference;
> import org.apache.wicket.behavior.SimpleAttributeModifier;
> import org.apache.wicket.behavior.AbstractBehavior;
> import org.apache.wicket.extensions.yui.calendar.DateField;
> import org.apache.wicket.markup.html.basic.Label;
> import org.apache.wicket.markup.html.form.RequiredTextField;
> import org.apache.wicket.markup.html.image.Image;
> import org.apache.wicket.markup.html.link.Link;
> import org.apache.wicket.markup.repeater.Item;
> import org.apache.wicket.markup.repeater.RefreshingView;
> import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
> import org.apache.wicket.markup.repeater.util.ModelIteratorAdapter;
> import org.apache.wicket.model.CompoundPropertyModel;
> import org.apache.wicket.model.IModel;
>
>
> import org.apache.wicket.markup.html.basic.Label;
> import org.apache.wicket.markup.html.form.Button;
> import org.apache.wicket.markup.html.form.Form;
> import org.apache.wicket.markup.html.form.Radio;
> import org.apache.wicket.markup.html.form.RadioChoice;
> import org.apache.wicket.markup.html.form.RadioGroup;
> import org.apache.wicket.markup.html.form.TextArea;
> import org.apache.wicket.markup.html.form.TextField;
> import org.apache.wicket.markup.html.link.ExternalLink;
> import org.apache.wicket.markup.html.link.Link;
> import org.apache.wicket.markup.html.WebMarkupContainer;
> import org.apache.wicket.markup.html.list.ListItem;
> import org.apache.wicket.markup.html.list.ListView;
> import org.apache.wicket.markup.html.panel.FeedbackPanel;
> import org.apache.wicket.model.AbstractReadOnlyModel;
> import org.apache.wicket.model.Model;
> import org.apache.wicket.model.PropertyModel;
> import org.apache.wicket.ResourceReference;
> import org.apache.wicket.behavior.SimpleAttributeModifier;
> import org.apache.wicket.behavior.AbstractBehavior;
> import org.apache.wicket.extensions.yui.calendar.DateField;
> import org.apache.wicket.markup.html.basic.Label;
> import org.apache.wicket.markup.html.form.RequiredTextField;
> import org.apache.wicket.markup.html.image.Image;
> import org.apache.wicket.markup.html.link.Link;
> import org.apache.wicket.markup.repeater.Item;
> import org.apache.wicket.markup.repeater.RefreshingView;
> import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
> import org.apache.wicket.markup.repeater.util.ModelIteratorAdapter;
> import org.apache.wicket.model.CompoundPropertyModel;
> import org.apache.wicket.model.IModel;
> import org.apache.wicket.validation.validator.EmailAddressValidator;
>
> import org.wicket.example.Address;
> import org.wicket.example.Pagamento;
> import org.wicket.example.Cart;
> import org.wicket.example.C;
> import org.wicket.example.pages.CheesrPage;
> import org.wicket.example.MainApplication;
>
> public class Checkout extends CheesrPage {
>        private Cart cart;
>
>
> public Checkout() {
> add(new FeedbackPanel("feedback"));
> add(new ListView("cart", new PropertyModel(this, "cart.cheeses")) {
>        public Model quantitaMOD;
>    String cat,articolo;
>        @Override
>        protected void populateItem(ListItem item) {
>            final C cheese = (C) item.getModelObject();
>
>            cat = cheese.getCat1();
>            articolo = (cat+cheese.getArt());
>            NumberFormat nf = NumberFormat.getCurrencyInstance();
>            String prezzopubSTR=cheese.getPrezzopub();
>            double prezzopubNUM=Double.parseDouble(prezzopubSTR);
>
>            // immagine piccola dell'oggetto
>            ExternalLink elink = new ExternalLink("OggettoLink", "
> http://sacredspirit.dyndns.org/"+cat.toLowerCase()+"/"+articolo.toLowerCase()+"_1.jpg"
> );
>            final String imageUrl = 
> "http://sacredspirit.dyndns.org/"+cat.toLowerCase()+"/"+articolo.toLowerCase()+"_1_piccola.jpg";
>  // partnerIconUrl;
>            WebMarkupContainer srcTag = new
> WebMarkupContainer("OggettoIcon");
>            IModel mediaSrc = new AbstractReadOnlyModel() {
>                @Override
>                public String getObject() { return imageUrl; }
>                };
>            srcTag.add(new AttributeModifier("src", mediaSrc));
>            elink.add(srcTag); item.add(elink);
>
>        item.add(new Label("articolo", articolo));
>        item.add(new Label("descrizione",cheese.getDescr_it()));
>            item.add(new Label("prezzo",
> nf.format(Double.parseDouble(cheese.getPrezzopub()))));
>            quantitaMOD = new Model(cheese.getQuantita());
>            final String quantitaSTR = (String) quantitaMOD.getObject();
>                System.out.println ("QuantFUORI="+quantitaSTR);
>            Form fquantita = new Form("fquantita") {
>                protected void onSubmit() {
>                        String quantitaFORM = (String)
> quantitaMOD.getObject();
>                        //Aggiorna quantita
>                        //String quantitaSTR = (String)
> quantitaMOD.getObject();
>                        System.out.println ("QuantSTR="+quantitaSTR);
>                        System.out.println ("QuantFORM="+quantitaFORM);
>                        //C selected = (C) item.getModelObject();
>                        //selected.setQuantita(quantitaFORM);
>                        cheese.setQuantita(quantitaFORM);
>                        System.out.println ("Quantity Value changed");
>                        setResponsePage(Checkout.class);
>                        } // OnSubmit
>            };  // form
>                TextField quantita = new TextField("quantita", quantitaMOD);
>            fquantita.add(quantita.setRequired(true));
>            item.add(fquantita);
>
>            item.add(new Label("subtotale",
> nf.format(Double.parseDouble(cheese.getPrezzopub())*Double.parseDouble(cheese.getQuantita()))
> ));
>            item.add(new Label("disp", cheese.getDisp()));
>            item.add(removeLink("rimuovi", item));
>            }  // populate item
>        }); // ListView
>        add(new Label("total", new Model() {
>                @Override
>            public Serializable getObject() { //era  public Object
> getObject() {
>                NumberFormat nf = NumberFormat.getCurrencyInstance();
>                return nf.format(getCart().getTotal()+6.98);
>                        }
>           }));
>
> Form form = new Form("form");
>        Address address = getCart().getBillingAddress();
>        form.add(new TextField("name", new PropertyModel(address,
> "name")).setRequired(true));
>        form.add(new TextField("street", new
> PropertyModel(address,"street")).setRequired(true));
>    form.add(new TextField("zipcode", new
> PropertyModel(address,"zipcode")).setRequired(true));
>    form.add(new TextField("city", new PropertyModel(address,
> "city")).setRequired(true));
>    form.add(new TextField("email", new PropertyModel(address,
> "email")).setRequired(true));
>    form.add(new TextField("telefono", new PropertyModel(address,
> "telefono")) );
>    form.add(new TextField("data", new PropertyModel(address, "data")) );
>    form.add(new TextField("note", new PropertyModel(address, "note")) );
>
>    final Pagamento bean=new Pagamento();
>    RadioGroup myInt = new RadioGroup("pagamento", new PropertyModel(bean,
> "myInt"));
>    myInt.add(new Radio("1", new Model(1)));
>    myInt.add(new Radio("2", new Model(2)));
>    myInt.add(new Radio("3", new Model(3)));
>    myInt.add(new Radio("4", new Model(4)));
>    myInt.add(new Radio("5", new Model(5)));
>    form.add(myInt.setRequired(true));
>
> form.add(new Button("order") {
>        @Override
>    public void onSubmit() {
>                String pagamentoSTR="Non è stato scelto il pagamento";
>        int pagamentoINT=bean.getMyInt();
>        System.out.println ("Tipo pagamento:"+pagamentoINT);
>        if (pagamentoINT==1) pagamentoSTR="Solo richiesta informazioni";
>        if (pagamentoINT==2) pagamentoSTR="Ritiro e pagamento di persona";
>        if (pagamentoINT==3) pagamentoSTR="Ricarica Postepay";
>        if (pagamentoINT==4) pagamentoSTR="Bonifico Bancario";
>        if (pagamentoINT==5) pagamentoSTR="Paypal e carte di credito";
>        System.out.println ("ORDINE:"+getCart().getOrdine());
>        // charge customers� credit card
>        // ship cheeses to our customer
>        // clean out shopping cart
>                Cart cart = getCart();
>                try  {
>             Properties props = System.getProperties ();
>             props.put ("mail.smtp.host", "smtp.tiscali.it");
>             Session session = Session.getDefaultInstance (props, null);
>             MimeMessage message = new MimeMessage (session);
>             message.setFrom (new InternetAddress
> (getCart().getBillingAddress().getEmail()));
>             message.addRecipient (Message.RecipientType.TO, new
> InternetAddress ("[email protected]"));
>             message.addRecipient (Message.RecipientType.BCC, new
> InternetAddress ("[email protected]"));
>             message.setSubject ("ORDINE DIRETTO dal sito SacredSpirit.it");
>             message.setText (getCart().getOrdine()+"\n\nNOME:
> "+getCart().getBillingAddress().getName()+"\nINDIRIZZO:
> "+getCart().getBillingAddress().getStreet()+"\nCAP:
> "+getCart().getBillingAddress().getZipcode()+"\nCITTA':
> "+getCart().getBillingAddress().getCity()+"\nEMAIL:
> "+getCart().getBillingAddress().getEmail()+"\nTELEFONO:
> "+getCart().getBillingAddress().getTelefono()+"\nDATA:
> "+getCart().getBillingAddress().getData()+"\nPAGAMENTO:
> "+pagamentoSTR+"\nNOTE: "+getCart().getBillingAddress().getNote() );
>             Transport.send (message);
>             setResponsePage(Ok.class);
>             }
>             catch (Exception e)
>             {
>                 System.out.println ("ERRORE INVIO MAIL ORDINE: "+e);
>                 setResponsePage(Error.class);
>             }
>        } // Submit
> });
> add(form);
>
> add(new Link("shop") {
>      @Override
>      public void onClick() {
>                setResponsePage(Home.class);
>                }
>        }); // add new link
>
> } // public checkout
> } // public class Checkout extends CheesrPage
> --------------------------------------------------------
>
> This is the complete source code of Cart.java if you need more, please tell
> me:
>
> package org.wicket.example;
>
> // package wicket.in.action.chapter03.section_3_1;
>
> import java.text.NumberFormat;
> import java.util.ArrayList;
> import java.util.List;
>
> public class Cart implements java.io.Serializable {
>  private static final long serialVersionUID = 1L;
>
>  private List<C> cheeses = new ArrayList<C>();
>
>  private Address billingAddress = new Address();
>
>  public List<C> getCheeses() {
>    return cheeses;
>  }
>
>  public void setCheeses(List<C> other) {
>    cheeses = other;
>  }
>
>  public Address getBillingAddress() {
>    return billingAddress;
>  }
>
>  public void setBillingAddress(Address other) {
>    billingAddress = other;
>  }
>  public double getTotal() {
>    double total = 0;
>    for (C cheese : cheeses) {
>      total +=
> Double.parseDouble(cheese.getPrezzopub())*Double.parseDouble(cheese.getQuantita());
>    }
>    return total;
>  }
>  public String getOrdine() {
>            double total = 0;
>            String ordine="ORDINE DIRETTO DAL SITO:\n";
>        NumberFormat nf = NumberFormat.getCurrencyInstance();
>            for (C cheese : cheeses) {
>              ordine = ordine + "ARTICOLO:
> "+cheese.getCat1()+cheese.getArt()+"  DESCRIZIONE: "+cheese.getDescr_it()+"
>  PREZZO: "+cheese.getPrezzopub()+"  QUANTITA': "+cheese.getQuantita()+"
>  SUBTOT:
> "+nf.format(Double.parseDouble(cheese.getPrezzopub())*Double.parseDouble(cheese.getQuantita()))
> +"  DISP: "+cheese.getDisp()+"\n";
>              total +=
> Double.parseDouble(cheese.getPrezzopub())*Double.parseDouble(cheese.getQuantita());
>                    }
>            ordine = ordine + "Totale: "+ nf.format(total+6.98);
>            return ordine;
>          }
>
> }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>


-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>

Reply via email to