/ Published in: Java
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
//CriteriaDataProvider.java package dbapp.persistence.hibernate; import static dbapp.persistence.hibernate.Orders.*; import java.util.Iterator; import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.hibernate.Criteria; import org.hibernate.criterion.Projections; public abstract class CriteriaDataProvider<T> extends SortableDataProvider<T> { public CriteriaDataProvider() { this("id"); } this.countProperty = countProperty; } protected abstract Criteria createCriteria(); public int size() { Criteria criteria = createCriteria(); criteria.setProjection(Projections.count(countProperty)); } @SuppressWarnings("unchecked") public Iterator<? extends T> iterator(int first, int count) { Criteria criteria = createCriteria(); addOrders(criteria); criteria.setFirstResult(first).setMaxResults(count); return criteria.list().iterator(); } protected void addOrders(Criteria criteria) { if (getSort() != null) criteria.addOrder(orderBy(getSort())); } public IModel<T> model(T object) { return new CompoundPropertyModel<T>(object); } } //ContatosPage.java package dbapp.ui.page; import static org.hibernate.criterion.Restrictions.*; import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstantiation; import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByBorder; import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; import org.apache.wicket.markup.html.basic.Label; 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.markup.html.link.Link; import org.apache.wicket.markup.html.navigation.paging.PagingNavigator; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.data.DataView; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.hibernate.Criteria; import org.hibernate.Session; import org.wicketstuff.annotation.mount.MountPath; import org.wicketstuff.annotation.strategy.MountHybrid; import dbapp.domain.entity.Contato; import dbapp.persistence.hibernate.CriteriaDataProvider; import dbapp.ui.BasePage; @AuthorizeInstantiation("ADMIN") @MountPath(path = "contatos") @MountHybrid @SuppressWarnings("unchecked") public class ContatosPage extends BasePage { @SpringBean private Session session; SortableDataProvider<Contato> dataProvider = new CriteriaDataProvider<Contato>() { protected Criteria createCriteria() { Criteria criteria = session.createCriteria(Contato.class, "contato"); if (keywords != null) { criteria.add(or(ilike("contato.nome", arg), ilike("contato.telefone", arg))); } } return criteria; } }; public ContatosPage() { super("Contatos - Pesquisa"); Form form = new Form("form", new CompoundPropertyModel(this)); public void onSubmit() { setResponsePage(new EditContatoPage(new Contato(), true)); } }); add(form); DataView<Contato> dataView = new DataView<Contato>("contatos", dataProvider, 2) { protected void populateItem(Item<Contato> item) { item.add(new Link<Contato>("editar", item.getModel()) { public void onClick() { setResponsePage(new EditContatoPage(getModelObject(), true)); } }); } }; add(dataView); add(new PagingNavigator("footerPaginator", dataView)); add(new PagingNavigator("headerPaginator", dataView)); add(new OrderByBorder("orderByNome", "contato.nome", dataProvider)); add(new OrderByBorder("orderByTelefone", "contato.telefone", dataProvider)); } } //ContatosPage.html <html xmlns:wicket="http://wicket.apache.org"> <body> <wicket:extend> <div class="span-24 last"> <form wicket:id="form"> <fieldset> <legend>Pesquisa por Contatos</legend> <div class="last"> <label>Palavras-chave <input wicket:id="keywords" style="width: 100%;"> </label> </div> <div class="last"> <button wicket:id="pesquisar">Pesquisar</button> <button wicket:id="novo">Novo Contato...</button> </div> </fieldset> </form> </div> <div class="span-24 last"> <table> <caption>Registro(s) encontrado(s):</caption> <thead> <tr> <td colspan="3" wicket:id="headerPaginator"></td> </tr> </thead> <thead> <tr> <th wicket:id="orderByNome">Nome</th> <th wicket:id="orderByTelefone">Telefone</th> <th></th> </tr> </thead> <tbody> <tr wicket:id="contatos"> <td wicket:id="nome"></td> <td wicket:id="telefone"></td> <td><a wicket:id="editar">editar</a></td> </tr> </tbody> <tfoot> <tr> <td colspan="3" wicket:id="footerPaginator"></td> </tr> </tfoot> </table> </div> </wicket:extend> </body> </html>