实现民族管理很简单,可参照中国行政区划管理,这里重点介绍JadePool查询与Primefaces分页的实现。
一、参照中国行政区划管理修改模板IndexTemplate.xhtml菜单项cn_people.xhtml文件内容见附件1。
二、创建PeopleBean受管Bean@ManagedBean @SessionScoped public class PeopleBean { ... }使用@ManagedBean注入,表明该类是JSF受管Bean,默认的变量名是peopleBean;可以通过@ManagedBean(name="minzu")将受管Bean的变量命名为"minzu"。
private Map peopleMap = new LinkedHashMap();//民族记录 private Map peopleSelected = new LinkedHashMap();//被选择的民族记录 private List<Map> peopleList = new ArrayList();//民族记录列表,用于记录cn_people表的查询结果 private ListMapDataModel peopleModel = new ListMapDataModel(peopleList,"people_id");//民族数据模型,"people_id"是cn_people数据库表的主键名为四个属性生成set、get方法(内容略)。
private void init() { Jade j=new Jade(); peopleList=j.query("select * from cn_people order by people_id"); peopleModel = new ListMapDataModel(peopleList, "people_id"); j.commit(); }在构造方法中调用init()。
public void guidePeople() { China cn = new China(); List<Map> v=cn.people(); //for(Map m:v){ //System.out.println(m);//{minzu=汉族, pinxie=Han, daima=HA}//请把原cn_people表中的字段名zimu修改为字段名daima //} Jade j=new Jade(); j.delete("delete from cn_people"); j.insert("cn_people", v, true);//true,自动插入主键 peopleList = j.query("select * from cn_people order by people_id");//查询 peopleModel = new ListMapDataModel(peopleList, "people_id");//建立数据模型 j.commit(); }
下图是初始化民族记录返回结果,提示消息由p:growl组件呈现。
<p:dataTable id="peopleDataTable" value="#{peopleBean.peopleModel}" var="m" paginator="true" paginatorPosition="bottom" rows="10" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="10,20,40,60" selection="#{peopleBean.peopleSelected}" selectionMode="single" > <p:column headerText="主键" style="text-align: center;" sortBy="#{m.people_id}" > #{m.people_id} </p:column> <p:column headerText="民族" sortBy="#{m.minzu}" > #{m.minzu} </p:column> <p:column headerText="拼写" sortBy="#{m.pinxie}" > #{m.pinxie} </p:column> <p:column headerText="字母" sortBy="#{m.daima}" > #{m.daima} </p:column> </p:dataTable>代码注解:
1、value属性连接数据模型,
2、var属性用于每条记录,
3、paginator="true"表明要显示导航条,
4、paginatorPosition="bottom"将导航条放到底部,
5、paginatorTemplate用来指定导航条中出现的按钮,
6、rows="10"每页10条记录显示,
7、rowsPerPageTemplate="10,20,40,60"分页方案,
8、selection="#{peopleBean.peopleSelected}"将被选的记录保存到peopleSelected属性中,
9、selectionMode="single"单行选择。
在表的主体部分p:column组件的sortBy用来指定排序的字段。
民族分页效果图,黄色记录是被选记录
<?xml version='1.0' encoding='GBK' ?> <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" template="./IndexTemplate.xhtml" xmlns:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:h="http://java.sun.com/jsf/html"> <ui:define name="content"> <h:form id="form"> <p:tabView id="tv" widgetVar="tv" dynamic="true"> <p:tab title="中国的民族"> <p:dataTable id="peopleDataTable" value="#{peopleBean.peopleModel}" var="m" paginator="true" paginatorPosition="bottom" rows="10" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="10,20,40,60" selection="#{peopleBean.peopleSelected}" selectionMode="single" > <p:column headerText="主键" style="text-align: center;" sortBy="#{m.people_id}" > #{m.people_id} </p:column> <p:column headerText="民族" sortBy="#{m.minzu}" > #{m.minzu} </p:column> <p:column headerText="拼写" sortBy="#{m.pinxie}" > #{m.pinxie} </p:column> <p:column headerText="字母" sortBy="#{m.daima}" > #{m.daima} </p:column> </p:dataTable> </p:tab> <p:tab title="初始化民族记录"> <div style="padding: 40px;text-align: center;"> <p:commandButton value="初始化民族" action="#{peopleBean.guidePeople}" icon="ui-icon-disk" update="@form :bottomForm:bottomGrowl"/> </div> </p:tab> </p:tabView> </h:form> </ui:define> </ui:composition>
/* * PeopleBean.java * 2013-03-31 * 胡开明 */ package china; import cn.jadepool.sql.Jade; import cn.jadepool.util.China; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.context.FacesContext; /** * 实现中国民族管理 * * @author hkm */ @ManagedBean @SessionScoped public class PeopleBean { private Map peopleMap = new LinkedHashMap();//民族记录 private Map peopleSelected = new LinkedHashMap();//被选择的民族记录 private List<Map> peopleList = new ArrayList();//民族记录列表,用于记录cn_people表的查询结果 private ListMapDataModel peopleModel = new ListMapDataModel(peopleList, "people_id");//民族数据模型,"people_id"是cn_people数据库表的主键名 /** * Creates a new instance of PeopleBean */ public PeopleBean() { init(); } public Map getPeopleMap() { return peopleMap; } public void setPeopleMap(Map peopleMap) { this.peopleMap = peopleMap; } public Map getPeopleSelected() { return peopleSelected; } public void setPeopleSelected(Map peopleSelected) { this.peopleSelected = peopleSelected; } public List<Map> getPeopleList() { return peopleList; } public void setPeopleList(List<Map> peopleList) { this.peopleList = peopleList; } public ListMapDataModel getPeopleModel() { return peopleModel; } public void setPeopleModel(ListMapDataModel peopleModel) { this.peopleModel = peopleModel; } /** * 初始化民族记录 */ private void init() { Jade j = new Jade(); peopleList = j.query("select * from cn_people order by people_id"); peopleModel = new ListMapDataModel(peopleList, "people_id"); j.commit(); } public void guidePeople() { China cn = new China(); List<Map> v = cn.people(); //for(Map m:v){ //System.out.println(m);//{minzu=汉族, pinxie=Han, daima=HA} //} Jade j = new Jade(); j.delete("delete from cn_people"); j.insert("cn_people", v, true);//true,自动插入主键 peopleList = j.query("select * from cn_people order by people_id"); peopleModel = new ListMapDataModel(peopleList, "people_id"); j.commit(); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("导入", "导入民族记录" + peopleList.size() + "条!")); } }