apache wicket - ссылка на столбец внутри DataTable при изменении таблицы (скажем, фильтр и получение 0 строк) сбой открытой страницы ссылки

сценарий: я использую таблицу данных со столбцами, один из столбцов является ссылкой. во время выполнения я рассчитываю, что ссылка создала проблему, когда: 1. страница таблицы opennig P1 2. я щелкнул ссылку, открытую в новой вкладке 2. новая вкладка создается с этим URL-адресом

 mit:8080/backoffice/?4-1.ILinkListener-MainPanelComponentWrapper-MainPanelComponent-table-gridForm-grid-body-rows-3-cells-2-cell-link 

который является компонентом на P1, эта вкладка генерирует P2.

  1. изменение P1, фильтрация на ajax и таблица пуста, поэтому table-gridForm не имеет данных
  2. освежающий P2
  3. получение исключения org.apache.wicket.WicketRuntimeException: Компонент «MainPanelComponentWrapper:MainPanelComponent:table:gridForm:grid:body:rows:1:cells:2:cell:link» был удален со страницы.

мне нужно создать перенаправленную ссылку, с которой будет связана новая страница. как я могу этого добиться?

 public class LinkPropertyColumn<T extends IEntity> extends BOPropertyColumn<T, String> implements IBOExportableColumn<T, String, Object> {

private static final long serialVersionUID = 1L;
private String headerTilte;
private GridViewType navigateTo;
private String routingByProperty;
private String entityId;
private String navigateToDynamicFunction;
private Map<String, String> filterByMap;
protected BOLinkPanel<T> linkPanel ;


    public LinkPropertyColumn(String displayModel, String propertyToSortBy, String propertyExpression, String entityId,
        String routingByProperty, String headerTilte, String navigateToDynamic) {
    super(Model.of(displayModel), propertyToSortBy, propertyExpression);
    this.headerTilte = headerTilte;
    this.entityId = entityId;
    this.navigateToDynamicFunction = navigateToDynamic;
    this.routingByProperty = routingByProperty;

}

@Override
public Component getHeader(String componentId) {
    return new Label(componentId, headerTilte);
}

@Override
public void populateItem(Item<ICellPopulator<T>> item, String componentId, final IModel<T> rowModel) {
     linkPanel = new BOLinkPanel<T>(componentId, rowModel, getPropertyExpression()) {
        private static final long serialVersionUID = 1L;

        @Override
        void onLinkClicked() {
            LinkPropertyColumn.this.onLinkClicked(rowModel);
        }
    };
    item.add(linkPanel);

}

public void onLinkClicked(IModel<T> rowModel) {

    doing stuff...
    params.add(HomePage.ENTITY_ID, idProperty);
    final Object routingProperty = routingByProperty == null ? idProperty : BeanUtils.getProperty(object, routingByProperty);
    params.set(HomePage.ROUTING_PROPERTY, routingProperty);
    HomePage homePage = new HomePage(params);
    final RequestCycle requestCycle = RequestCycle.get();
    requestCycle.setResponsePage(homePage);

}

}

}

а также :

 public abstract class BOLinkPanel<T> extends Panel {

private static final long serialVersionUID = 1L;

/**
 * @param id
 */
public BOLinkPanel(String id, IModel<T> model, String propertyExpression) {
    super(id);
    AbstractLink link = getLink();

    link.add(new Label("caption", new PropertyModel<String>(model.getObject(), propertyExpression)));
    add(link);
}

protected AbstractLink getLink() {
    Link<Void> link = new AjaxFallbackLink<Void>("link") {
        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AjaxRequestTarget target) {
            // TODO Auto-generated method stub
            BOLinkPanel.this.onLinkClicked();
        }

//          @Override
//          public void onClick() {
//              BOLinkPanel.this.onLinkClicked();
//
//          }
    };
    return link;
}

    abstract void onLinkClicked();

}


person yoav.str    schedule 07.12.2014    source источник


Ответы (1)


я сделал :

 requestCycle.setResponsePage(HomePage.class, params);
person yoav.str    schedule 07.12.2014