/ 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>
Comments
 Subscribe to comments
                    Subscribe to comments
                
                