List of usage examples for org.apache.wicket.extensions.markup.html.repeater.data.table DataTable getDataProvider
public final IDataProvider<T> getDataProvider()
From source file:gr.interamerican.wicket.markup.html.panel.crud.picker.TestCrudPickerPanel.java
License:Open Source License
/** * Tests pressing the new button and storing * a new bean./*from w w w .j a v a2 s . co m*/ */ @Test public void testNew() { tester.startPage(getTestPage(panel)); assertEquals(7, definition.getList().size()); tester.assertComponent(path("tableForm:radioGroup:listTable"), DataTable.class); DataTable<BeanWithOrderedFields> table = (DataTable<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("tableForm:radioGroup:listTable")); assertEquals(7, table.getDataProvider().size()); tester.assertComponent(path("tableForm:radioGroup"), RadioGroup.class); RadioGroup<BeanWithOrderedFields> radioGroup = (RadioGroup<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("tableForm:radioGroup")); radioGroup.setModelObject(definition.getList().get(0)); tester.assertComponent(path("tableForm:newButton"), AjaxButton.class); AjaxButton newButton = (AjaxButton) tester.getComponentFromLastRenderedPage(path("tableForm:newButton")); tester.executeAjaxEvent(newButton, "onclick"); tester.assertComponent(path("beanPanel:beanForm"), Form.class); tester.assertComponent(path("beanPanel:beanForm:beanFormFieldsPanel"), Panel.class); tester.assertComponent(path("beanPanel:beanForm:executeButton"), CallbackAjaxButton.class); CallbackAjaxButton execButton = (CallbackAjaxButton) tester .getComponentFromLastRenderedPage(path("beanPanel:beanForm:executeButton")); userInput = new BeanWithOrderedFields("11", "22", 33, 44L, 5.5d); FormTester formTester = tester.newFormTester(path("beanPanel:beanForm")); formTester.setValue("beanFormFieldsPanel:first", String.valueOf(userInput.getFirst())); formTester.setValue("beanFormFieldsPanel:second", String.valueOf(userInput.getSecond())); formTester.setValue("beanFormFieldsPanel:third", String.valueOf(userInput.getThird())); formTester.setValue("beanFormFieldsPanel:fourth", String.valueOf(userInput.getFourth())); formTester.setValue("beanFormFieldsPanel:fifth", String.valueOf(userInput.getFifth())); formTester.submit(); tester.executeAjaxEvent(execButton, "onclick"); tester.assertComponent(path("tableForm:radioGroup:listTable"), DataTable.class); table = (DataTable<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("tableForm:radioGroup:listTable")); assertEquals(8, table.getDataProvider().size()); tester.assertInvisible(path("beanPanel")); }
From source file:gr.interamerican.wicket.markup.html.panel.crud.picker.TestCrudPickerPanel.java
License:Open Source License
/** * Tests pressing the update button and updating a bean. *///w w w.j ava 2s . com @Test public void testUpdate() { tester.startPage(getTestPage(panel)); assertEquals(7, definition.getList().size()); tester.assertComponent(path("tableForm:radioGroup:listTable"), DataTable.class); DataTable<BeanWithOrderedFields> table = (DataTable<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("tableForm:radioGroup:listTable")); assertEquals(7, table.getDataProvider().size()); tester.assertComponent(path("tableForm:radioGroup"), RadioGroup.class); RadioGroup<BeanWithOrderedFields> radioGroup = (RadioGroup<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("tableForm:radioGroup")); radioGroup.setModelObject(definition.getList().get(0)); tester.assertComponent(path("tableForm:editButton"), AjaxButton.class); AjaxButton editButton = (AjaxButton) tester.getComponentFromLastRenderedPage(path("tableForm:editButton")); Map<String, String[]> map = tester.getRequest().getParameterMap(); map.put("testId:tableForm:radioGroup", new String[] { "radio0" }); tester.executeAjaxEvent(editButton, "onclick"); tester.assertVisible(path("beanPanel:beanForm:beanFormFieldsPanel")); Panel beanPanel = (Panel) tester .getComponentFromLastRenderedPage(path("beanPanel:beanForm:beanFormFieldsPanel")); assertEquals(definition.getList().get(0), beanPanel.getDefaultModelObject()); /* * Will leave first two fields intact and modify the third */ userInput = (BeanWithOrderedFields) beanPanel.getDefaultModelObject(); FormTester formTester = tester.newFormTester(path("beanPanel:beanForm")); formTester.setValue("beanFormFieldsPanel:first", String.valueOf(userInput.getFirst())); formTester.setValue("beanFormFieldsPanel:second", String.valueOf(userInput.getSecond())); formTester.setValue("beanFormFieldsPanel:third", String.valueOf(editInt)); formTester.setValue("beanFormFieldsPanel:fourth", String.valueOf(userInput.getFourth())); formTester.setValue("beanFormFieldsPanel:fifth", String.valueOf(userInput.getFifth())); formTester.submit(); Integer changed = ((BeanWithOrderedFields) beanPanel.getDefaultModelObject()).getThird(); assertEquals(changed, editInt); tester.assertComponent(path("beanPanel:beanForm:executeButton"), CallbackAjaxButton.class); CallbackAjaxButton updateButton = (CallbackAjaxButton) tester .getComponentFromLastRenderedPage(path("beanPanel:beanForm:executeButton")); tester.executeAjaxEvent(updateButton, "onclick"); tester.assertComponent(path("tableForm:radioGroup:listTable"), DataTable.class); table = (DataTable<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("tableForm:radioGroup:listTable")); assertEquals(7, table.getDataProvider().size()); tester.assertInvisible(path("beanPanel")); }
From source file:gr.interamerican.wicket.markup.html.panel.listTable.TestListTablePanel.java
License:Open Source License
/** * Tests creation of {@link ListTablePanel}. *//*from w w w . j a v a 2s.c om*/ @Test public void testCreation() { tester.startPage(getTestPage(new ListTablePanel<BeanWithOrderedFields>(createDef()))); tester.assertComponent(path("tableForm:listTable"), DataTable.class); tester.assertVisible(path("tableForm:listTable")); DataTable<BeanWithOrderedFields> table = (DataTable<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("tableForm:listTable")); assertEquals(3, table.getColumns().size()); assertEquals(7, table.getDataProvider().size()); }
From source file:gr.interamerican.wicket.markup.html.panel.searchFlow.TestSearchFlowPanel.java
License:Open Source License
/** * Tests submitting the criteria panel form. * /* w ww . ja v a 2 s . co m*/ * Results panel is shown as a {@link PickerPanel}. * * Check that the panel shows the results and pick one. * * Then go back to criteria. * * Note that resultsHidesCriteria = true */ @Test public void testShowResults_Pick() { panel = new SearchFlowPanel<BeanWithOrderedFields, BeanWithOrderedFields>(definition_Pick); tester.startPage(getTestPage(panel)); tester.assertComponent(path("criteriaPanel"), SingleBeanPanel.class); tester.assertVisible(path("criteriaPanel")); SingleBeanPanel<BeanWithOrderedFields> SingleBeanPanel = (SingleBeanPanel<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("criteriaPanel")); assertNotNull(SingleBeanPanel); tester.assertInvisible(path("resultsPanel")); tester.assertComponent(path("criteriaPanel:beanForm"), Form.class); tester.assertVisible(path("criteriaPanel:beanForm")); Form<BeanWithOrderedFields> form = (Form<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("criteriaPanel:beanForm")); assertNotNull(form); tester.assertComponent(path("criteriaPanel:beanForm:executeButton"), CallbackAjaxButton.class); tester.assertVisible(path("criteriaPanel:beanForm:executeButton")); CallbackAjaxButton executeButton = (CallbackAjaxButton) tester .getComponentFromLastRenderedPage(path("criteriaPanel:beanForm:executeButton")); assertNotNull(executeButton); FormTester formTester = tester.newFormTester(path("criteriaPanel:beanForm")); formTester.submit(); tester.executeAjaxEvent(executeButton, "onclick"); tester.assertNoErrorMessage(); tester.assertNoInfoMessage(); /* the new results panel is rendered */ tester.assertComponent(path("resultsPanel"), PickerPanel.class); tester.assertComponent(path("resultsPanel:tableForm"), Form.class); tester.assertComponent(path("resultsPanel:tableForm:selectButton"), CallbackAjaxButton.class); tester.assertVisible(path("resultsPanel:tableForm:selectButton")); tester.assertComponent(path("resultsPanel:tableForm:radioGroup"), RadioGroup.class); tester.assertComponent(path("resultsPanel:tableForm:radioGroup:listTable"), DataTable.class); RadioGroup<BeanWithOrderedFields> radioGroup = (RadioGroup<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("resultsPanel:tableForm:radioGroup")); DataTable<BeanWithOrderedFields> datatable = (DataTable<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("resultsPanel:tableForm:radioGroup:listTable")); assertEquals(list.size(), datatable.getDataProvider().size()); CallbackAjaxButton pickButton = (CallbackAjaxButton) tester .getComponentFromLastRenderedPage(path("resultsPanel:tableForm:selectButton")); pickAction.setExecuted(false); /* * simulate picking the first radio button and submitting. */ radioGroup.setModelObject(list.get(0)); Map<String, String[]> map = tester.getRequest().getParameterMap(); map.put("testId:tableForm:radioGroup", new String[] { "radio0" }); tester.executeAjaxEvent(pickButton, "onclick"); assertTrue(pickAction.isExecuted()); assertEquals(list.get(0), definition_Pick.getBeanModel().getObject()); }
From source file:gr.interamerican.wicket.markup.html.panel.searchFlow.TestSearchFlowPanel.java
License:Open Source License
/** * Tests submitting the criteria panel form. * /*from w w w. ja va 2s . c o m*/ * Results panel is shown as a {@link MultipleSelectionsPanel}. * * Check that the panel shows the results and pick two. * * Then go back to criteria. * * Note that resultsHidesCriteria = true */ @Test public void testShowResults_MultiplePick() { panel = new SearchFlowPanel<BeanWithOrderedFields, BeanWithOrderedFields>(definition_MultiplePick); tester.startPage(getTestPage(panel)); tester.assertComponent(path("criteriaPanel"), SingleBeanPanel.class); tester.assertVisible(path("criteriaPanel")); SingleBeanPanel<BeanWithOrderedFields> SingleBeanPanel = (SingleBeanPanel<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("criteriaPanel")); assertNotNull(SingleBeanPanel); tester.assertInvisible(path("resultsPanel")); tester.assertComponent(path("criteriaPanel:beanForm"), Form.class); tester.assertVisible(path("criteriaPanel:beanForm")); Form<BeanWithOrderedFields> form = (Form<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("criteriaPanel:beanForm")); assertNotNull(form); tester.assertComponent(path("criteriaPanel:beanForm:executeButton"), CallbackAjaxButton.class); tester.assertVisible(path("criteriaPanel:beanForm:executeButton")); CallbackAjaxButton executeButton = (CallbackAjaxButton) tester .getComponentFromLastRenderedPage(path("criteriaPanel:beanForm:executeButton")); assertNotNull(executeButton); FormTester formTester = tester.newFormTester(path("criteriaPanel:beanForm")); formTester.submit(); tester.executeAjaxEvent(executeButton, "onclick"); tester.assertNoErrorMessage(); tester.assertNoInfoMessage(); /* the new results panel is rendered */ tester.assertComponent(path("resultsPanel"), MultipleSelectionsPanel.class); tester.assertComponent(path("resultsPanel:tableForm"), Form.class); tester.assertComponent(path("resultsPanel:tableForm:checkGroup"), CheckGroup.class); tester.assertComponent(path("resultsPanel:tableForm:checkGroup:listTable"), DataTable.class); CheckGroup<BeanWithOrderedFields> checkGroup = (CheckGroup<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("resultsPanel:tableForm:checkGroup")); DataTable<BeanWithOrderedFields> datatable = (DataTable<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("resultsPanel:tableForm:checkGroup:listTable")); assertEquals(list.size(), datatable.getDataProvider().size()); CallbackAjaxButton pickButton = (CallbackAjaxButton) tester .getComponentFromLastRenderedPage(path("resultsPanel:tableForm:selectButton")); pickAction.setExecuted(false); /* * simulate picking the first two radio buttons and submitting. */ List<BeanWithOrderedFields> selections = new ArrayList<BeanWithOrderedFields>(); selections.add(list.get(0)); selections.add(list.get(1)); checkGroup.setModelObject(selections); Map<String, String[]> map = tester.getRequest().getParameterMap(); map.put("testId:tableForm:checkGroup", new String[] { "check0", "check1" }); tester.executeAjaxEvent(pickButton, "onclick"); assertEquals(selections, definition_MultiplePick.getSelectionsModel().getObject()); }
From source file:gr.interamerican.wicket.markup.html.panel.searchFlow.TestSearchFlowPanel.java
License:Open Source License
/** * Tests submitting the criteria panel form. * /*from ww w . j av a 2 s .c om*/ * Results panel is shown as a {@link ListTablePanel}. * * Check that the panel shows the results. * * Check that both panels appear simultaneously. * * Check that the back button of the results panel is not shown. * * Note that resultsHidesCriteria = false */ @Test public void testShowResults_List() { panel = new SearchFlowPanel<BeanWithOrderedFields, BeanWithOrderedFields>(definition_List); tester.startPage(getTestPage(panel)); tester.assertComponent(path("criteriaPanel"), SingleBeanPanel.class); tester.assertVisible(path("criteriaPanel")); SingleBeanPanel<BeanWithOrderedFields> SingleBeanPanel = (SingleBeanPanel<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("criteriaPanel")); assertNotNull(SingleBeanPanel); tester.assertInvisible(path("resultsPanel")); tester.assertComponent(path("criteriaPanel:beanForm"), Form.class); tester.assertVisible(path("criteriaPanel:beanForm")); Form<BeanWithOrderedFields> form = (Form<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("criteriaPanel:beanForm")); assertNotNull(form); tester.assertComponent(path("criteriaPanel:beanForm:executeButton"), CallbackAjaxButton.class); tester.assertVisible(path("criteriaPanel:beanForm:executeButton")); CallbackAjaxButton executeButton = (CallbackAjaxButton) tester .getComponentFromLastRenderedPage(path("criteriaPanel:beanForm:executeButton")); assertNotNull(executeButton); FormTester formTester = tester.newFormTester(path("criteriaPanel:beanForm")); formTester.submit(); tester.executeAjaxEvent(executeButton, "onclick"); tester.assertNoErrorMessage(); tester.assertNoInfoMessage(); /* the new results panel is rendered */ tester.assertComponent(path("resultsPanel"), ListTablePanel.class); tester.assertVisible(path("resultsPanel")); tester.assertVisible(path("criteriaPanel")); tester.assertComponent(path("resultsPanel:tableForm"), Form.class); DataTable<BeanWithOrderedFields> datatable = (DataTable<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("resultsPanel:tableForm:listTable")); assertEquals(list.size(), datatable.getDataProvider().size()); tester.assertInvisible(path("resultsPanel:tableForm:backButton")); }
From source file:gr.interamerican.wicket.markup.html.panel.searchFlow.TestSearchFlowPanel.java
License:Open Source License
/** * Tests creation of the {@link SearchFlowPanel} with a * {@link CrudPickerPanel} as the results panel. * //from w w w .j a v a2 s. c o m * Show the results. * * Note that resultsHidesCriteria = true */ @Test public void testCreation_ShowResults_CrudPick() { panel = new SearchFlowPanel<BeanWithOrderedFields, BeanWithOrderedFields>(definition_CrudPick); tester.startPage(getTestPage(panel)); tester.assertComponent(path("criteriaPanel"), SingleBeanPanel.class); tester.assertVisible(path("criteriaPanel")); SingleBeanPanel<BeanWithOrderedFields> SingleBeanPanel = (SingleBeanPanel<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("criteriaPanel")); assertNotNull(SingleBeanPanel); tester.assertInvisible(path("resultsPanel")); tester.assertComponent(path("criteriaPanel:beanForm"), Form.class); tester.assertVisible(path("criteriaPanel:beanForm")); Form<BeanWithOrderedFields> form = (Form<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("criteriaPanel:beanForm")); assertNotNull(form); tester.assertComponent(path("criteriaPanel:beanForm:executeButton"), CallbackAjaxButton.class); tester.assertVisible(path("criteriaPanel:beanForm:executeButton")); CallbackAjaxButton executeButton = (CallbackAjaxButton) tester .getComponentFromLastRenderedPage(path("criteriaPanel:beanForm:executeButton")); assertNotNull(executeButton); FormTester formTester = tester.newFormTester(path("criteriaPanel:beanForm")); formTester.submit(); tester.executeAjaxEvent(executeButton, "onclick"); tester.assertNoErrorMessage(); tester.assertNoInfoMessage(); /* the new results panel is rendered */ tester.assertComponent(path("resultsPanel"), CrudPickerPanel.class); tester.assertVisible(path("resultsPanel")); tester.assertInvisible(path("criteriaPanel")); tester.assertComponent(path("resultsPanel:tableForm"), Form.class); DataTable<BeanWithOrderedFields> datatable = (DataTable<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("resultsPanel:tableForm:radioGroup:listTable")); assertEquals(list.size(), datatable.getDataProvider().size()); tester.assertVisible(path("resultsPanel:tableForm:backButton")); tester.assertComponent(path("resultsPanel:tableForm:deleteButton"), CallbackAjaxButton.class); tester.assertComponent(path("resultsPanel:tableForm:editButton"), AjaxButton.class); tester.assertComponent(path("resultsPanel:tableForm:newButton"), AjaxButton.class); tester.assertComponent(path("resultsPanel:tableForm:selectButton"), CallbackAjaxButton.class); }
From source file:gr.interamerican.wicket.markup.html.panel.searchFlow.TestSearchFlowPanel.java
License:Open Source License
/** * Tests creation of the {@link SearchFlowPanel} with a * {@link CrudPickerPanel} as the results panel. * /* w w w . j ava 2 s . co m*/ * Show the results. * * Press new. * * Then save. * * Press new. * * Then go back. * * Note that resultsHidesCriteria = true */ @Test public void testCrud_CrudPick() { panel = new SearchFlowPanel<BeanWithOrderedFields, BeanWithOrderedFields>(definition_CrudPick); tester.startPage(getTestPage(panel)); tester.assertComponent(path("criteriaPanel"), SingleBeanPanel.class); tester.assertVisible(path("criteriaPanel")); SingleBeanPanel<BeanWithOrderedFields> SingleBeanPanel = (SingleBeanPanel<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("criteriaPanel")); assertNotNull(SingleBeanPanel); tester.assertInvisible(path("resultsPanel")); tester.assertComponent(path("criteriaPanel:beanForm"), Form.class); tester.assertVisible(path("criteriaPanel:beanForm")); Form<BeanWithOrderedFields> form = (Form<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("criteriaPanel:beanForm")); assertNotNull(form); tester.assertComponent(path("criteriaPanel:beanForm:executeButton"), CallbackAjaxButton.class); tester.assertVisible(path("criteriaPanel:beanForm:executeButton")); CallbackAjaxButton executeButton = (CallbackAjaxButton) tester .getComponentFromLastRenderedPage(path("criteriaPanel:beanForm:executeButton")); assertNotNull(executeButton); FormTester formTester = tester.newFormTester(path("criteriaPanel:beanForm")); formTester.submit(); tester.executeAjaxEvent(executeButton, "onclick"); tester.assertNoErrorMessage(); tester.assertNoInfoMessage(); /* the new results panel is rendered */ tester.assertComponent(path("resultsPanel"), CrudPickerPanel.class); tester.assertVisible(path("resultsPanel")); tester.assertInvisible(path("criteriaPanel")); tester.assertComponent(path("resultsPanel:tableForm"), Form.class); DataTable<BeanWithOrderedFields> datatable = (DataTable<BeanWithOrderedFields>) tester .getComponentFromLastRenderedPage(path("resultsPanel:tableForm:radioGroup:listTable")); assertEquals(list.size(), datatable.getDataProvider().size()); tester.assertVisible(path("resultsPanel:tableForm:backButton")); /* press new and add a new bean */ tester.assertInvisible(path("resultsPanel:beanPanel")); tester.assertComponent(path("resultsPanel:tableForm:newButton"), AjaxButton.class); AjaxButton newButton = (AjaxButton) tester .getComponentFromLastRenderedPage(path("resultsPanel:tableForm:newButton")); formTester = tester.newFormTester(path("resultsPanel:tableForm")); formTester.submit(); tester.executeAjaxEvent(newButton, "onclick"); tester.assertComponent(path("resultsPanel:beanPanel:beanForm:executeButton"), CallbackAjaxButton.class); CallbackAjaxButton saveButton = (CallbackAjaxButton) tester .getComponentFromLastRenderedPage(path("resultsPanel:beanPanel:beanForm:executeButton")); formTester = tester.newFormTester(path("resultsPanel:beanPanel:beanForm")); formTester.setValue("beanFormFieldsPanel:first", String.valueOf(userInput.getFirst())); formTester.setValue("beanFormFieldsPanel:second", String.valueOf(userInput.getSecond())); formTester.setValue("beanFormFieldsPanel:third", String.valueOf(userInput.getThird())); formTester.setValue("beanFormFieldsPanel:fourth", String.valueOf(userInput.getFourth())); formTester.setValue("beanFormFieldsPanel:fifth", String.valueOf(userInput.getFifth())); formTester.submit(); assertEquals(list.size(), 7); tester.executeAjaxEvent(saveButton, "onclick"); assertEquals(list.size(), 8); tester.assertInvisible(path("resultsPanel:beanPanel")); /* press new and then back */ tester.assertInvisible(path("resultsPanel:beanPanel")); tester.assertComponent(path("resultsPanel:tableForm:newButton"), AjaxButton.class); newButton = (AjaxButton) tester.getComponentFromLastRenderedPage(path("resultsPanel:tableForm:newButton")); formTester = tester.newFormTester(path("resultsPanel:tableForm")); formTester.submit(); tester.executeAjaxEvent(newButton, "onclick"); tester.assertComponent(path("resultsPanel:beanPanel:beanForm:backButton"), CallbackAjaxButton.class); CallbackAjaxButton backButton = (CallbackAjaxButton) tester .getComponentFromLastRenderedPage(path("resultsPanel:beanPanel:beanForm:backButton")); tester.executeAjaxEvent(backButton, "onclick"); tester.assertInvisible(path("resultsPanel:beanPanel")); }
From source file:org.opensingular.form.wicket.mapper.masterdetail.MasterDetailBSDataTableBuilder.java
License:Apache License
@Override protected BSDataTable<T, S> newDatatable(String id, List<? extends IColumn<T, S>> columns, ISortableDataProvider<T, S> dataProvider) { return new BSDataTable<T, S>(id, columns, dataProvider) { @Override/*from w w w .ja v a 2 s . c o m*/ protected AbstractToolbar newNoRecordsToolbar() { if (isShowNoRecordsToolbar()) { return new MasterDetailNoRecordsToolbar(this); } else { return null; } } @Override protected AbstractToolbar newPaginationToolbar() { return new BSPaginationToolbar(this) { @Override protected BSPaginationPanel newPagination(String id, DataTable<?, ?> table) { return new BSPaginationPanel(id, table) { @Override protected NumberedPageLink newNumberedPageLink(ListItem<Long> item) { NumberedPageLink link = super.newNumberedPageLink(item); item.add($b.classAppender("has-error", $m.get(() -> (!SValidationFeedbackHandler .collectNestedErrors(new FeedbackFence(item)).isEmpty())))); SValidationFeedbackHandler.bindTo(new FeedbackFence(item)).addListener( (handler, target, container, baseInstances, oldErrors, newErrors) -> { if (target != null) target.add(item); }).setInstanceModels($m.get(() -> { final IDataProvider<SInstance> dataProvider = (IDataProvider<SInstance>) table .getDataProvider(); final long pageIndex = item.getModelObject(); final long first = pageIndex * table.getItemsPerPage(); final long count = Math.min(table.getItemsPerPage(), dataProvider.size() - first); final Iterator<? extends SInstance> it = dataProvider.iterator(first, count); final List<IModel<? extends SInstance>> list = Lists.newArrayList(); while (it.hasNext()) list.add(dataProvider.model(it.next())); return list; })); return link; } }; } }; } }; }