table = new AjaxFallbackDefaultDataTable("components", getColumns(), getModel(), 100) { @Override protected Item newRowItem(String id, int index, IModel model) { Item components = new Item(id, index, model) { @Override public void onEvent(IEvent event) { super.onEvent(event); if (event.getPayload() instanceof ComponentChangedEvent) { ComponentChangedEvent payload = (ComponentChangedEvent) event.getPayload(); BuildableComponentDto buildableComponentDto = payload.getBuildableComponentDto(); if (buildableComponentDto.getId().equals(getModelObject().getId())) { setModelObject(payload.getBuildableComponentDto()); payload.getTarget().add(this); event.stop(); } } else if (event.getPayload() instanceof ComponentDeletedEvent) { ComponentDeletedEvent payload = (ComponentDeletedEvent) event.getPayload(); BuildableComponentDto buildableComponentDto = payload.getBuildableComponentDto(); AjaxRequestTarget target = payload.getTarget(); if (buildableComponentDto.getId().equals(getModelObject().getId())) { this.setVisible(false); target.add(this); event.stop(); } } } }; components.setMarkupId(ROW_ID_PREFIX + model.getObject().getId()); components.setOutputMarkupId(true); return components; } }; public void addItem(AjaxRequestTarget target, BuildableComponentDto buildableComponentDto) { try { RefreshingView datagrid = (RefreshingView) ReflectUtils.getInstance().getFieldValue( table, "datagrid"); Method method = RefreshingView.class.getDeclaredMethod("newItemFactory"); method.setAccessible(true); IItemFactory factory = (IItemFactory) method.invoke(datagrid); Item item = factory.newItem(buildableComponentDto.getId(), new Model(buildableComponentDto)); datagrid.add(item); target.prependJavaScript(String.format( "var item=document.createElement('%s');item.id='%s';" + "Wicket.$('%s').getElementsByTagName(\"tbody\")[0].appendChild(item);", "tr", item.getMarkupId(), table.getMarkupId())); target.add(item); } catch (Exception e) { throw new RuntimeException(e); } }