Jeremy, the code is below.

I did notice something while researching/testing more.
The LinkPanel solution DOES work for a DataTable. The problem starts when
changed to a AjaxFallbackDefaultDataTable.
I did testing based in the datatable example in the wicket examples.
Maybe using an AjaxLink instead of a normal link in the table is the right
answer.


Code is mostly taken from the page linked in the original email

public abstract class LinkPanel<T> extends Panel {

    private static final long serialVersionUID = 2062173455224348354L;

    public LinkPanel(final Item<?> item, final String componentId,
            final IModel<T> model, final String property) {
        super(componentId, model);

        AjaxLink<T> link = new AjaxLink<T>("linkCell") {

            private static final long serialVersionUID =
2574434147588617330L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                LinkPanel.this.onClick();
            }


        };
        add(link);
        link.add(new Label("label", new PropertyModel(model,property)));
    }

    protected abstract void onClick();
}

----------------- Usage ---------------

public class LinkPanelPage extends WebPage {

    public LinkPanelPage() {
Form form = new Form("form");
        final LinkPanelListProvider provider = new LinkPanelListProvider();
        List<IColumn> columnList = new ArrayList<IColumn>(3);
        //columnList.add(new PropertyColumn(new
Model("eMailAddress"),"eMailAddress"));
        columnList.add(new AbstractColumn(new Model("eMailAddress"),
"eMailAddress") {
            private static final long serialVersionUID =
-1822504503325964706L;

            @Override
            @SuppressWarnings("unchecked")
            public void populateItem(Item cellItem, String componentId,
final IModel rowModel) {
                cellItem.add(new LinkPanel(cellItem, componentId, rowModel,
getSortProperty()) {

                    private static final long serialVersionUID =
-4615958634366803506L;

                    @Override
                    protected void onClick() {
                        System.out.println("clicked on link");
                    }
                });
            }

        });

        columnList.add(new PropertyColumn(new
Model("firstName"),"firstName"));
        columnList.add(new PropertyColumn(new
Model("lastName"),"lastName"));
        AjaxFallbackDefaultDataTable table = new
AjaxFallbackDefaultDataTable("link-panel-table", columnList, provider, 3);
        form.add(table);
        add(form);
}
}

-Nelson

On Mon, Jun 28, 2010 at 5:14 PM, Jeremy Thomerson <jer...@wickettraining.com
> wrote:

> please show some code
>
> On Mon, Jun 28, 2010 at 6:39 PM, Nelson Segura <nsegu...@gmail.com> wrote:
>
> > I am trying to create a table based on DataTable, in which one of the
> > columns has links on it.
> > I tried to use the strategy described here (LinkPanel):
> >
> > https://cwiki.apache.org/WICKET/adding-links-in-a-defaultdatatable.html
> >
> > But this has a problem: clicking in the links in succession soon causes
> > "component not found exceptions", or opening the link in a new window or
> > tab
> > renders the current page unusable, with the same exception.
> >
> > rg.apache.wicket.WicketRuntimeException: component ..... not found on
> page
> > ...
> >     at
> >
> org.apache.wicket.request.AbstractRequestCycleProcessor.resolveListenerInterfaceTarget(AbstractRequestCycleProcessor.java:426)
> >     at
> >
> org.apache.wicket.request.AbstractRequestCycleProcessor.resolveRenderedPage(AbstractRequestCycleProcessor.java:471)
> >     at
> >
> org.apache.wicket.protocol.http.WebRequestCycleProcessor.resolve(WebRequestCycleProcessor.java:144)
> >     at org.apache.wicket.RequestCycle.step(RequestCycle.java:1310)
> > ...
> >
> > I believe this is due to the fact that a new LinkPanel is created when
> > rendering each column cell, and that when the click happens, the current
> > LinkPanels are replaced by new ones, and so the original page is not
> usable
> > anymore, because it is referring to the original LinkPanels.
> >
> > Our users make heavy use of opening links in a list in new pages or tabs,
> > so
> > this is a big deal for us :(
> >
> > Is there any solution for this problem? The only one I can think of is to
> > use AjaxLink instead, but I am not sure whether that is correct, or if it
> > could cause even more problems.
> >
> > Any help?
> >
> > -Nelson
> >
>
>
>
> --
> Jeremy Thomerson
> http://www.wickettraining.com
>

Reply via email to