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

Сценарий: я использую таблицу данных со столбцами, один из столбцов является ссылкой. во время выполнения я вычисляю ссылку, которая создала проблему, если: 1. открыть страницу таблицы 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: таблица:gridForm:grid: тело:rows:1: ячейки:2: ячейка: ссылка' был удален со страницы.

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

 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();

}

1 ответ

Я сделал:

 requestCycle.setResponsePage(HomePage.class, params);
Другие вопросы по тегам