OK, I thought I had it working correctly...but I can't seem to figure out why I'm getting a ClassCastException in the model now.
It displays the correct quantity when the page is first pulled up (after selecting an item & quantity on previous page) - but if I change the quantity and re-submit on the Cart page I get this: java.lang.ClassCastException: java.lang.Integer at com.agribeef.abcommerce.ui.Cart$1$1.setObject(Cart.java:121) at wicket.Component.setModelObject(Component.java:1908) Line 121 is commented: IModel selectionModel = new Model() { public void setObject(Component c, Object o) { //121: CCE HAPPENS HERE selection.put(config, Integer.valueOf((String)o)); } public Object getObject(Component c) { return selection.get(config); } }; If I'm selecting a string from the DropDownChoice as a value, why would this barf? I think I've been staring at this code too long...I'm starting to trip over my own toes. On 5/1/06, Vincent Jenks <[EMAIL PROTECTED]> wrote:
Man, that'd be nice.... On 5/1/06, Igor Vaynberg <[EMAIL PROTECTED]> wrote: > no prob. > > for future ref keep in mind wicket works on objects. this will be easier > when we have generics in 2.0 because then the decl would be > > DropDownChoice<T>(String id, IModel<T> selection, IModel<List<T>> choices) > > -Igor > > > On 5/1/06, Vincent Jenks <[EMAIL PROTECTED]> wrote: > > > Ahh crap...that worked. I had been around in circles on this so many > times that was the only combination I *hadn't* tried. > > Thanks Igor, I really appreciate it. > > On 5/1/06, Igor Vaynberg < [EMAIL PROTECTED]> wrote: > > next thing is your choices need to be integers, because "10"!=10 > > > > > > -Igor > > > > > > On 5/1/06, Vincent Jenks < [EMAIL PROTECTED]> wrote: > > > I set it to return selection.get(config) and it still doesn't select > > anything. > > > > > > I have this now: > > > > > > 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(config); > > > } > > > }; > > > > > > ...which is still producing 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> > > > > > > I don't want to work directly on the cart object since I have a method > > > in another class that accepts a Map....and I'm reusing that method > > > throughout the cart. I don't want to write another method or alter > > > the one I have to get around this issue. It works well as it takes > > > the map apart, determines if the object already exists, adjusts the > > > quantity, etc. I want all cart item additions, adjustments, etc. to > > > flow thorugh this single method. > > > > > > On 5/1/06, Igor Vaynberg < [EMAIL PROTECTED]> wrote: > > > > 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 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------- > > > 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 > > > > > > > > > > ------------------------------------------------------- > > 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 > >
------------------------------------------------------- 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?cmd=lnk&kid0709&bid&3057&dat1642 _______________________________________________ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user