`
log_cd
  • 浏览: 1098536 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

wicket之实现IDataProvider接口,只查询当前页数据

阅读更多
1.html文件
<html>
  <head>
	<link href="styles/wicket.css" rel="stylesheet" type="text/css">
	<link href="styles/office.css" rel="stylesheet" type="text/css">
  </head>
<body>
	<h3>DataView+ListDataProvider例子</h3>
	<form wicket:id ="form">
		<span wicket:id ="navigator">这里显示分页操作</span>
		<table width="100%" border="0" cellspacing="1" cellpadding="0" id="baseCodeSetting">
		  <thead>	
			<tr>
                <th align="center">姓名</th>
                <th align="center" width="50">性别</th>
                <th align="center">职务</th>
                <th align="center">联系电话</th>
                <th align="center">QQ</th>
                <th align="center">E-mail</th>
                <th align="center">博客地址</th>
                <th align="center" width="50">操作</th>
			</tr>
		  </thead>
		  <tbody>
			<tr wicket:id="cards">
				<td align="center" wicket:id ="name">title </td>
				<td align="center" wicket:id ="sex">author</td>
				<td align="center" wicket:id ="duty">duty</td>
				<td align="center" wicket:id ="tel">tel</td>
				<td align="center" wicket:id ="qq">qq</td>
				<td align="center" wicket:id ="e_mail">e_mail</td>
				<td align="center"><a wicket:id ="blog">blog</a></td>
				<td align="center"><a wicket:id="edit">edit</a></td>
			</tr>
		  </tbody>
		</table >
	</form>
</body>
</html>

2.java文件
package com.logcd.wicket.cards;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.ExternalLink;
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.markup.repeater.data.IDataProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;

import com.logcd.web.bo.KingCards;
import com.logcd.web.bo.dao.KingCardsDao;

@SuppressWarnings({ "unchecked", "serial" })
public class DataViewPage extends WebPage{
	
	@SpringBean(name = "kingCardsDao")
	private KingCardsDao kingCardsDao;

	public DataViewPage() {
		super();
		final DataView listView = new DataView("cards", new KingCardsDataProvider(), 2) {
			protected void populateItem(Item item) {
				final KingCards card = (KingCards) item.getModelObject();
				item.add(new Label("name", card.getName()));
				item.add(new Label("sex", card.getSex()));
				item.add(new Label("duty", card.getDuty()));
				item.add(new Label("tel", card.getTel()));
				item.add(new Label("e_mail", card.getEMail()));
				item.add(new Label("qq", card.getQq()));
				item.add(new ExternalLink("blog", card.getBlog(),card.getBlog()));
				item.add(new Link("edit") {
					public void onClick() {
					}
				});
			}
		};
		Form form = new Form("form") {
			protected void onSubmit() {
			}
		};
		this.add(form);
		form.add(listView);
		form.add(new PagingNavigator("navigator", listView));
	}
	
	/**
	 * 提供分页数据的内部类
	 * @author logcd
	 */
	public class KingCardsDataProvider implements IDataProvider{
		private static final long serialVersionUID = 1L;
		private List list = Collections.synchronizedList(new ArrayList());
		
		public Iterator iterator(int firstItem, int itemsPerPage) {
			Integer pageNo=firstItem/itemsPerPage;//查询第几页
			StringBuilder hql = new StringBuilder();
			hql.append("from KingCards cards where cards.Type=0");
			list=kingCardsDao.findOnePageObjects(hql.toString(), pageNo, itemsPerPage);
		    return list.iterator();
		}

		public IModel model(Object obj) {
			return new Model((Serializable) obj);
		}

		public int size() {
			return kingCardsDao.findRowCount("select count(*) from KingCards cards where cards.Type=0");
		}

		public void detach() {
			 this.list.clear();
		}
	}
}

3.dao中的两个方法
	/**
	 * 根据Hql,返回结果集中的一页
	 * @param hql
	 * @param pageNo         第几页
	 * @param itemsPerPage   每页记录条数
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<T> findOnePageObjects(final String hql,final Integer pageNo,final Integer itemsPerPage){
		return getHibernateTemplate().executeFind(new HibernateCallback() {
			public Object doInHibernate(Session session) throws HibernateException, SQLException {
				return session.createQuery(hql).setFirstResult(pageNo*itemsPerPage).setMaxResults(itemsPerPage).list();
			}
		});
	}
	/**
	 * 根据自己的制定的hql来查询返回的所有记录的总数
	 * 
	 * @param hql
	 * @return
	 */
	public int findRowCount(final String hql) {
		return ((Long) getHibernateTemplate().execute(new HibernateCallback() {
			public Object doInHibernate(Session session) throws HibernateException, SQLException {
				return session.createQuery(hql).iterate().next();
			}

		})).intValue();
	}
分享到:
评论

相关推荐

    wicket指南

    5. **数据绑定**:Wicket 提供了模型机制,可以将组件与数据对象绑定,实现数据的自动同步。 6. **国际化**:支持多语言,通过`ResourceModel`和`.properties`文件实现。 7. **分页与排序**:Wicket 提供了`...

    [原创]wicket开发手记(三)数据校验

    本篇笔记将深入探讨Wicket框架下的数据校验机制,重点讲解如何实现基本的数据校验以及如何自定义校验逻辑。Wicket是一款强大的Java Web应用框架,它提供了丰富的工具和API来简化Web应用程序的开发过程。 #### 二、...

    wicket开发指南 pdf

    Wicket 支持多种数据绑定方式,如IModel接口,允许开发者将数据模型与组件关联。这使得在页面刷新或回发时,组件的状态能自动保持,实现了服务器端的状态管理。 **五、表单处理** 在Wicket中,表单组件(如Form、...

    wicket 基础知识培训

    开发者还需要理解Wicket的模型-视图-控制器(MVC)概念,虽然Wicket的实现方式略有不同,但它仍然遵循类似的模式。此外,学习如何利用Wicket的会话管理和URL映射功能也是很重要的。 通过比较Wicket和Struts,我们...

    wicket的tree的简单实例

    通过这些示例,初学者可以了解到如何在Wicket中有效地使用Tree组件,包括构建数据模型、创建TreeNode、实现Ajax交互以及优化性能。学习这些内容有助于开发出更加直观和用户友好的Web应用,特别是在展示和操作层次...

    wicket文档

    ### Wicket文档知识点详解 #### 1. Wicket简介 **1.1 Wicket前生后世篇** Wicket是一款开源的Java Web应用框架,它最初由Geert Bevin在2003年创建。其设计理念是提供一种简单、直观的方式来构建复杂的Web应用程序...

    Wicket 开发指南

    - **模型绑定**:使用`model()`或`IModel`接口将数据绑定到组件上。 - **事件处理**:通过实现`onSubmit()`或其他事件方法来处理用户提交的表单数据。 - **链接和导航**:创建`Link`对象实现页面间的跳转。 5. *...

    apache-wicket-7

    这可以通过实现IModel接口来实现,允许在模型和组件之间传递和更新数据。 3. **Ajax支持**:Wicket 7提供了强大的Ajax功能,允许部分页面刷新,无需刷新整个页面。AjaxRequestTarget类是处理Ajax响应的核心,它可以...

    wicket简单实例

    **Wicket简单实例详解** Wicket是一款开源的Java Web应用程序框架,它强调组件化和模型-视图-控制器(MVC)的设计模式。这个“wicket简单实例”是为了帮助初学者理解Wicket的工作原理和基本操作,通过运行这些示例...

    wicket 官方JAVA教程

    **Wicket官方JAVA教程** Wicket是一款开源的Java Web应用程序框架,它强调组件化和声明式编程模型,使得开发人员可以构建出用户界面更加灵活且易于维护的Web应用。本教程将深入探讨Wicket的核心概念、特性以及如何...

    wicket国际化例子

    在本文中,我们将深入探讨Wicket框架中的国际化(i18n)实现,以及如何使用`wicket:message`和`StringResourceModel`等工具来读取`.properties`资源文件。Wicket是一个流行的Java web应用程序框架,它提供了强大的...

    wicket-menu-6.5.0.zip

    在实际项目中,开发者可能会利用Wicket的Model接口来存储菜单数据,这可以是从数据库、XML配置或者服务端计算得出的。此外,Wicket的Ajax支持也使得菜单可以响应用户的交互,如展开/关闭子菜单,无需刷新整个页面。 ...

    wicket开发指南

    - **模型(Model)**:存储组件的数据,可以是简单的Java对象,也可以是更复杂的模型实现,如IModel接口。 - **页面(Page)**:Wicket 应用的基本导航单位,一个页面可以包含多个组件。 - **会话(Session)**:...

    wicket例子和开发指南

    Wicket是一个开源的Java Web应用程序框架,它提供了一种组件化的开发方式,使得Web应用的构建更为简单和直观。这个压缩包包含了一个Wicket的开发指南PDF文档以及一些示例项目,这些都是学习和掌握Wicket框架的重要...

    Wicket.pdf(Wicket开发指南)

    ### Wicket 开发指南知识点概览 #### 一、Wicket 框架介绍 - **框架起源与发展:** - Wicket 是一种基于 Java 的 Web 应用框架,最初由 Marc Guillemot 和 Eelco Hillenius 开发。 - 该框架首次公开发布是在 ...

    wicket相关书籍

    5. **数据绑定**:了解如何将组件与模型数据绑定,以及如何实现数据持久化,比如使用Hibernate或其他ORM工具。 6. **国际化和本地化**:Wicket提供了强大的I18N支持,学习如何为不同地区和语言创建多语言应用。 7....

    wicket的helloworld

    **Wicket HelloWorld程序详解** ...Wicket的强大之处在于它的组件模型和强大的数据绑定机制,使得开发动态、交互性强的Web应用变得更加简单和直观。对于初学者来说,理解这些基础知识是进一步学习Wicket的关键。

Global site tag (gtag.js) - Google Analytics