You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Mathias Nilsson <wi...@gmail.com> on 2010/04/09 20:51:35 UTC

java.lang.IndexOutOfBoundsException ListItemModel getObject

Hi,

I need help to get around this error I'm getting. I have a list of products
in my cart that I have added. In another session the administrator has
deleted the products.
When I hit a refresh link ( AjaxSubmitLink ) I get an
IndexOutOfBoundsException. This is done before getting to the onSubmit().
How can I get around this?

Look at the refresh AjaxSubmitLink.

protected class BasketFragment extends Fragment{
private static final long serialVersionUID = 1L;
private WebMarkupContainer updateContainer;
WebMarkupContainer cartContainer;
public void onFlash(AjaxRequestTarget target ){
updateContainer.setVisible( true );
target.appendJavascript(  "new Effect.Fade('"+ updateContainer.getMarkupId()
+"',{duration: 2.0});" );
target.appendJavascript(  "new Effect.Highlight('"+
updateContainer.getMarkupId() +"',{startcolor: '#ff99ff',endcolor:
'#ffffff'});" );
 target.addComponent(updateContainer );
 }

public BasketFragment(String id, String markupId ) {
super(id, markupId, BasePage.this);
 Form<Void> cartForm = new Form<Void>( "cartForm" );
updateContainer = new WebMarkupContainer( "updateContainer" );
updateContainer.setOutputMarkupId( true );
updateContainer.setOutputMarkupPlaceholderTag( true );
updateContainer.setVisible( false );
cartForm.add( updateContainer );
 IModel<List<CartItem>> cartItemModel = new
LoadableDetachableModel<List<CartItem>>(){
private static final long serialVersionUID = 1L;

@Override
protected List<CartItem> load() {
return getCartDAO().getCartItems( FricoSession.get().getCartId() );
}
 };
 final ListView<CartItem> cartView = new ListView<CartItem>( "cartView",
cartItemModel ){
private static final long serialVersionUID = 1L;

@Override
protected void populateItem(ListItem<CartItem> item) {
 final CartItem cartItem = item.getModelObject();
 item.setModel(new CompoundPropertyModel<CartItem>(item.getModel()));
if( item.getIndex() % 2 == 0 ){
item.add( new SimpleAttributeModifier( "class" , "even" ));
}else{
item.add( new SimpleAttributeModifier( "class" , "odd" ));
}
Product product = item.getModelObject().getProduct();
String name = product.getName();
if( name.length() > 19 ){
name = name.substring( 0,19) + "...";
}
Label label = new Label( "name" , name );
label.add( new SimpleAttributeModifier( "title" , product.getName()));
 item.add( label );
 TextField<Long> quantity = new TextField<Long>( "quantity" );
item.add( quantity );
 AjaxSubmitLink delete = new AjaxSubmitLink( "delete" ){
private static final long serialVersionUID = 1L;

@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
getCartDAO().delete( cartItem );
onUpdateCart(target,false);
 }
 };
 item.add( delete );
 }
 };
 AjaxSubmitLink refresh = new AjaxSubmitLink( "refresh" ){
private static final long serialVersionUID = 1L;

@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
List<CartItem> items = cartView.getModelObject();
Iterator<CartItem> iter = items.iterator();
while( iter.hasNext() ){
CartItem item = iter.next();
Product product = item.getProduct();
Product p = getProductDAO().find( Product.class, product.getId());
if( p != null ){
getCartDAO().save( item );
}else{
iter.remove();
}
}
 onUpdateCart(target, true);
  }
 };
cartForm.add( refresh );
cartContainer = new WebMarkupContainer( "cartContainer" );
cartContainer.add( cartForm );
cartContainer.setOutputMarkupId( true );
add( cartContainer );
cartForm.add( cartView );
WebMarkupContainer emptyCart = new WebMarkupContainer( "emptyCart" );
emptyCart.add( new LogoutLink( "logoutLink" ) );
add( emptyCart );
 AjaxLink<Void> cancelLink = new AjaxLink<Void>( "cancelLink" ){

private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
getCartDAO().empty( FricoSession.get().getCartId() );
onUpdateCart(target,false);
}
 @Override
                protected IAjaxCallDecorator getAjaxCallDecorator(){
                    return new AjaxCallDecorator() {
private static final long serialVersionUID = 1L;
@Override
                        public CharSequence decorateScript(CharSequence
script) {
                             return "if( !confirm('"+
getLocalizer().getString( "cancel.warning", BasePage.this ) +"')) return
false;" + script;
                        }

                    };
                }
};
 AjaxLink<Void> checkoutLink = new AjaxLink<Void>( "checkoutLink" ){

private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
checkoutPanel =  new CheckoutPanel( "content" );
getContentPanel().addOrReplace( checkoutPanel);
target.addComponent(  getContentPanel() );
}




};
 cartContainer.add( new LogoutLink( "logoutLink" ) );
cartContainer.add( cancelLink );
cartContainer.add( checkoutLink );
 emptyCart.setVisible( false );
if( cartItemModel.getObject().isEmpty() ){
cartContainer.setVisible( false );
emptyCart.setVisible( true );
}
  }
}

Re: java.lang.IndexOutOfBoundsException ListItemModel getObject

Posted by Mathias Nilsson <wi...@gmail.com>.
This is the stack trace

ERROR - RequestCycle               - Index: 0, Size: 0
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
	at java.util.ArrayList.RangeCheck(Unknown Source)
	at java.util.ArrayList.get(Unknown Source)
	at
org.apache.wicket.markup.html.list.ListItemModel.getObject(ListItemModel.java:58)
	at
org.apache.wicket.model.CompoundPropertyModel.getObject(CompoundPropertyModel.java:64)
	at
org.apache.wicket.model.AbstractPropertyModel.getTarget(AbstractPropertyModel.java:193)
	at
org.apache.wicket.model.AbstractPropertyModel.getObject(AbstractPropertyModel.java:114)
	at org.apache.wicket.Component.getDefaultModelObject(Component.java:1657)
	at org.apache.wicket.Component$3.compare(Component.java:548)
	at org.apache.wicket.Component.setDefaultModelObject(Component.java:3044)
	at
org.apache.wicket.markup.html.form.FormComponent.updateModel(FormComponent.java:1168)
	at
org.apache.wicket.markup.html.form.Form$FormModelUpdateVisitor.component(Form.java:227)
	at
org.apache.wicket.markup.html.form.FormComponent.visitComponentsPostOrderHelper(FormComponent.java:514)
	at
org.apache.wicket.markup.html.form.FormComponent.visitComponentsPostOrderHelper(FormComponent.java:493)
	at
org.apache.wicket.markup.html.form.FormComponent.visitComponentsPostOrderHelper(FormComponent.java:493)
	at
org.apache.wicket.markup.html.form.FormComponent.visitComponentsPostOrderHelper(FormComponent.java:493)
	at
org.apache.wicket.markup.html.form.FormComponent.visitComponentsPostOrder(FormComponent.java:465)
	at
org.apache.wicket.markup.html.form.Form.internalUpdateFormComponentModels(Form.java:2081)
	at
org.apache.wicket.markup.html.form.Form.updateFormComponentModels(Form.java:2049)
	at org.apache.wicket.markup.html.form.Form.process(Form.java:1004)
	at org.apache.wicket.markup.html.form.Form.process(Form.java:931)
	at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:896)
	at
org.apache.wicket.ajax.form.AjaxFormSubmitBehavior.onEvent(AjaxFormSubmitBehavior.java:135)
	at
org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:177)
	at
org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:286)
	at
org.apache.wicket.request.target.component.listener.BehaviorRequestTarget.processEvents(BehaviorRequestTarget.java:119)
	at
org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
	at
org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250)
	at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
	at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1428)
	at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
	at
org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:479)
	at
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:312)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

-- 
View this message in context: http://old.nabble.com/java.lang.IndexOutOfBoundsException-ListItemModel-getObject-tp28196181p28196344.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org