----UsersPage---- import org.apache.wicket.extensions.markup.html.repeater.data.table.*; import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterForm; import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterToolbar; import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.TextFilteredPropertyColumn; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.Model; import org.apache.wicket.spring.injection.annot.SpringBean; import wcpackage.domain.entities.User; import wcpackage.service.UserService; import wcpackage.webapplication.view.BasePage; public class UsersPage extends BasePage { @SpringBean private UserService userService; private User user; public UsersPage() { addUsersDataTable(); addUsersAddForm(); } private void addUsersDataTable() { IColumn<User>[] columns = new IColumn[3]; columns[0] = new PropertyColumn<User>(new Model("Login"), "login", "login"); columns[1] = new PropertyColumn<User>(new Model("First Name"), "firstName", "firstName"); columns[2] = new TextFilteredPropertyColumn<User, String>(new Model("Last Name"), "lastName", "lastName"); UsersProvider usersProvider = new UsersProvider(userService); DataTable<User> users = new DataTable<User>("users", columns, usersProvider, 10); users.addBottomToolbar(new NavigationToolbar(users)); users.addTopToolbar(new HeadersToolbar(users, usersProvider)); FilterForm<User> filterForm = new FilterForm<User>("filterForm", usersProvider); users.addTopToolbar(new FilterToolbar(users, filterForm, usersProvider)); filterForm.add(users); add(filterForm); } private void addUsersAddForm() { user = new User(); Form form = new Form("form", new CompoundPropertyModel(user)); form.add(new TextField("login")); form.add(new TextField("firstName")); form.add(new TextField("lastName")); form.add(new Button("addButton") { @Override public void onSubmit() { userService.createNewUser(user); } }); add(form); } } --------------------------------UsersProvider--------------------------------------------------- import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.IFilterStateLocator; import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import wcpackage.domain.entities.User; import wcpackage.service.UserService; import java.util.Iterator; public class UsersProvider extends SortableDataProvider<User> implements IFilterStateLocator<User> { private UserService userService; private User filterState; public UsersProvider(UserService userService) { this.userService = userService; filterState = new User(); setSort("login", true); } public Iterator<? extends User> iterator(int first, int count) { System.out.println("filter: " + filterState.toString()); String sortType = getSort().isAscending() ? "asc" : "desc"; return userService.find(first, count, getSort().getProperty(), sortType).iterator(); } public int size() { return userService.numberOfUsers(); } public IModel<User> model(User object) { return new Model(object); } public void detach() { } public User getFilterState() { return filterState; } public void setFilterState(User state) { this.filterState = state; } } -----------------------------html--------------------- <html xmlns:wicket="http://www.w3.org/1999/xhtml"> <wicket:head> <title></title> </wicket:head> <body> <wicket:extend> <br/> <form wicket:id="filterForm"> <input type="hidden" name="tracker" wicket:id="focus-tracker"/> <span wicket:id="focus-restore">[call to focus restore script]</span> <table cellspacing="0" wicket:id="users">[users]</table> </form> <form wicket:id="form"> First name: <input wicket:id="firstName"/> Last name: <input wicket:id="lastName"/> Login: <input wicket:id="login"/> <button wicket:id="addButton">add</button> </form> </wicket:extend> </body> </html>