furthermore, if you wanted you can work on your cart object directly instead of having to translate to and from the map.

-Igor


On 5/1/06, Igor Vaynberg <[EMAIL PROTECTED]> wrote:
                               IModel selectionModel = new Model()
                               {
                                       public void setObject(Component c, Object o)
                                       {
                                               selection.put(config, Integer.parseInt((String)o));
                                       }

                                       public Object getObject(Component c)
                                       {
                                               return selection.get(this);
                                       }
                               };

in getObject() shouldnt that be return selection.get(config); get(this) will always return null.

-Igor



On 5/1/06, Vincent Jenks <[EMAIL PROTECTED] > wrote:
I'm back on this issue now after having put it on the "back-burner"
for a short time...since I couldn't figure it out before.  I had
posted several messages about this but can't find the original emails
to reply to, so I'm sorry to create a new thread out of an old issue!

I *just can't* get this dropdown to choose an item after loading the
model and passing it in...I've exhausted all of my own ideas and
really need help figuring this out.

I'm building a shopping cart and after selecting an item to add to
your cart on a products-list page...you see the next page (Cart
class).

In the previous page I used a Map to store the Configuration item +
its quantity selected by the user (Igor, you may remember my many
posts on this issue)....I then use the Cart page to load the Map into
the page for display.  Adding & changing items in my cart revolve
around Wicket passing this Map into it.

In the Cart page I pre-load a new Map to pass into a ListView and the
user can then adjust the quantity of the items chosen and re-submit
the changes.

Here is the entire class:

************************************************************************************
public class Cart extends WebPage
{
        private Map<Configuration, Integer> selection = new
HashMap<Configuration, Integer>();

        public Cart()
        {
                //get cart from session
                final ShoppingCart cart = ((UserSession)getSession()).getCart();

                //create form
                Form form = new Form("cartForm");

                //add OrderLine items to map
                for (OrderLine line : cart.getOrderLines())
                {
                        selection.put(line.getConfiguration(), line.getQuantity());
                }

                //add list of Configuration objects to form
                form.add(new ListView("cartView", cart.getOrderLines())
                {
                        protected void populateItem(ListItem item)
                        {
                                //get object
                                final OrderLine line = (OrderLine)item.getModelObject();

                                //pull config from line
                                final Configuration config = line.getConfiguration();

                                //store Configuration and qty in model
                                IModel selectionModel = new Model()
                                {
                                        public void setObject(Component c, Object o)
                                        {
                                                selection.put(config, Integer.parseInt((String)o));
                                        }

                                        public Object getObject(Component c)
                                        {
                                                return selection.get(this);
                                        }
                                };

                                //qty select values
                                List<String> choices = Arrays.asList(
                                                new String[] {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"});

                                //add quantity select list
                                item.add(new DropDownChoice("quantity", selectionModel, choices)
                                {
                                        protected String getDefaultChoice(final Object selected)
                            {
                        return ""; //get rid of "Choose One" default
                            }

                                        public String getDisplayValue(Object object)
                                        {
                                                return object.toString();
                                        }

                                        public String getIdValue(Object object, int index)
                                        {
                                                return object.toString();
                                        }
                                });

                                //create link w/ event handler
                                item.add(new Link("removeLink")
                                {
                                        public void onClick()
                                        {
                                           ............................
                                        }
                                });
                        }
                }.setOptimizeItemRemoval(true)); //must be set inside of form

                //add submit button
                form.add(new Button("qtyChangeButton")
                {
                        public void onSubmit()
                        {
                            ................
                        }
                });

                //add form to page
                add(form);
        }
}
************************************************************************************

You'll see I declared my map at the top of the ctor:

private Map<Configuration, Integer> selection = new
HashMap<Configuration, Integer>();

Later, in the ListView I'm trying to match the users' Configuration
objects so the quantity will automatically show in the DropDownChoice
list in the page:

                                IModel selectionModel = new Model()
                                {
                                        public void setObject(Component c, Object o)
                                        {
                                                selection.put(config, Integer.parseInt((String)o));
                                        }

                                        public Object getObject(Component c)
                                        {
                                                return selection.get(this);
                                        }
                                };

However, the existing quantity does not get selected, it always
defaults to zero, the first item in the list.  The html renders like
this:

<select wicket:id="quantity" name="cartView:0:quantity">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select>

Now, if I were to select a quantity and re-submit...it works
correctly...that's not the issue...the only issue I have is the
*existing* quantity for that Configuration object is not selected by
default...it looks bad and if the user were to accidentally submit w/o
first selecting a quantity, it would set it to zero and remove the
item from the cart....eep!

Igor had suggested that it was a data-type conversion issue IIRC, but
I tried turning the array into Integers:

List<Integer> choices = Arrays.asList(
                                                new Integer[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9});

...it didn't matter.

When i walk through the debugger the model is getting
populated...everything appears to go according to plan...I just can't
nail this one!

Thanks in advance, it's much appreciated!!


-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmdlnk&kid0709&bid&3057&dat1642
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user


Reply via email to