I am attaching a Quickstart project to help reproduce the problem.
On the home page, middle click in the email address shown (usually
this will take a user to a detail page, but in this case it just
prints a message). After that, any click on a link in the page will
cause a component not found exception.
Thanks for all your help.
-Nelson
On Wed, Jun 30, 2010 at 9:18 AM, Nelson Segura <nsegu...@gmail.com
<mailto:nsegu...@gmail.com>> wrote:
Can anyone explain to me why this does not work with
AjaxFallbackDefaultDataTable, but does with DefaultDataTable.
Does anyone know of a solution for this problem?
On Mon, Jun 28, 2010 at 6:18 PM, Nelson Segura
<nsegu...@gmail.com <mailto:nsegu...@gmail.com>> wrote:
Since AjaxLink is AJAX and not a proper link, then it does
behave as a normal link, i.e. middle click (open link in new
tab or new window) does not trigger the AJAX click even,
which means you cannot chose to open the link in a new page.
back to square one, except that know I know is a problem with
AjaxFallbackDefaultDataTable, not with DataTable.
-Nelson
On Mon, Jun 28, 2010 at 5:47 PM, Nelson Segura
<nsegu...@gmail.com <mailto:nsegu...@gmail.com>> wrote:
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
<mailto:jer...@wickettraining.com>> wrote:
please show some code
On Mon, Jun 28, 2010 at 6:39 PM, Nelson Segura
<nsegu...@gmail.com <mailto: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
---------------------------------------------------------------------
To unsubscribe, e-mail:users-unsubscr...@wicket.apache.org
For additional commands, e-mail:users-h...@wicket.apache.org