Getting the following error.  Not sure what I am doing wrong. I've seen
other JIRA issues opened along the same lines.

IllegalStateException when refreshing a WebMarkupContainer containing a
AjaxFallbackDefaultDataTable where one of the columns is a AjaxEditableLabel
which refreshes the markup container on submit

Attached is the html + page + component to recreate the issue.

Stack Trace as follows:
java.lang.IllegalStateException: No Page found for component
[MarkupContainer [Component id = cell, page = <No Page>, path =
1:cells:5:cell.QuantityLabel]]
     at org.apache.wicket.Component.getPage(Component.java:1658)
     at
org.apache.wicket.ajax.AjaxRequestTarget.respondComponent(AjaxRequestTarget.java:689)
     at
org.apache.wicket.ajax.AjaxRequestTarget.respondComponents(AjaxRequestTarget.java:605)
     at
org.apache.wicket.ajax.AjaxRequestTarget.respond(AjaxRequestTarget.java:520)
     at
org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:104)
     at
org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1172)
     at org.apache.wicket.RequestCycle.step(RequestCycle.java:1243)
     at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1331)
     at org.apache.wicket.RequestCycle.request(RequestCycle.java:493)
     at
org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:363)
     at
org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:124)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
package da.web.wicket.test;

//~--- non-JDK imports --------------------------------------------------------

import java.util.ArrayList;
import java.util.List;

import da.web.wicket.structure.MainPageWithBorder;
import da.web.wicket.test.datatable.SortableContactDataProvider;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableLabel;
import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


@SuppressWarnings(value="all")
public class TestAjaxDataTable extends MainPageWithBorder {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	static Logger logger = LoggerFactory.getLogger(TestAjaxDataTable.class);

	public TestAjaxDataTable()
	{
		List columns = new ArrayList();

		/*
		columns.add(new AbstractColumn(new Model("Actions"))
		{
			public void populateItem(Item cellItem, String componentId, IModel model)
			{
				cellItem.add(new ActionPanel(componentId, model));
			}
		});
*/
		WebMarkupContainer wmc = new WebMarkupContainer("container");
		wmc.setOutputMarkupId(true);
		add(wmc);

		columns.add(new PropertyColumn(new Model("ID"), "id"));
		columns.add(new PropertyColumn(new Model("First Name"), "firstName", "firstName"));
		columns.add(new PropertyColumn(new Model("Last Name"), "lastName", "lastName"));
		columns.add(new PropertyColumn(new Model("Home Phone"), "homePhone"));

		EditableQuantityPropertyColumn eqpc = new EditableQuantityPropertyColumn(new Model("Cell Phone"), "cellPhone");
		eqpc.setCartContainer(wmc);
		columns.add(eqpc);
		wmc.add(new AjaxFallbackDefaultDataTable("table", columns, new SortableContactDataProvider(), 8));

		/*		
		AjaxFallbackDefaultDataTable dt = new AjaxFallbackDefaultDataTable("table");

		add(dt);
		*/
	}

}


 class EditableQuantityPropertyColumn extends PropertyColumn {

	QuantityLabel ql;
	WebMarkupContainer cartData;
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	static Logger logger = LoggerFactory.getLogger(EditableQuantityPropertyColumn.class);

	public EditableQuantityPropertyColumn(IModel model, String propertyExpression) {
		super(model, propertyExpression);
		
	}

	public EditableQuantityPropertyColumn(IModel model, String sortOrder,
			String propertyExpression) {
		super(model, sortOrder, propertyExpression);
		
	}

	public void populateItem(Item item, String componentId, IModel model) {

		IModel labelmodel = createLabelModel(model);
		
		ql = new QuantityLabel(componentId, labelmodel, model);
		ql.setCartContainer(getCartContainer());
		item.add(ql);
		
	}

	protected IModel createLabelModel(IModel embeddedModel) {
		IModel m = super.createLabelModel(embeddedModel);
		return m;
	}


	public void setCartContainer(WebMarkupContainer d)
	{
		cartData = d;
	}
	
	public WebMarkupContainer getCartContainer()
	{
		return cartData;
	}
}

class QuantityLabel extends AjaxEditableLabel
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	static Logger logger = LoggerFactory.getLogger(QuantityLabel.class);
	
	IModel originalmodel;
	public QuantityLabel(String id, IModel model, IModel originalmodel)
	{
		super(id, model);
		this.originalmodel = originalmodel;
		
	}
	
	@Override
	protected void onSubmit(AjaxRequestTarget target)
	{
		target.addComponent(container);
		super.onSubmit(target);
	}

	WebMarkupContainer container;
	public void setCartContainer(WebMarkupContainer container) {
		this.container = container;
	}
	
	

	
}

// ~ Formatted by Jindent --- http://www.jindent.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to