• JadePool应用范例:查询与分页


    实现民族管理很简单,可参照中国行政区划管理,这里重点介绍JadePool查询与Primefaces分页的实现

    一、参照中国行政区划管理修改模板IndexTemplate.xhtml菜单项
            将<p:menuitem value="民族" url="#" />修改为<p:menuitem value="中国民族" outcome="cn_people" />;
            创建cn_people.xhtml文件,因为使用的outcome属性,如果该文件不存在,则运行异常。

            cn_people.xhtml文件内容见附件1。

    二、创建PeopleBean受管Bean

    @ManagedBean
    @SessionScoped
    public class PeopleBean {
      ...
    }

    使用@ManagedBean注入,表明该类是JSF受管Bean,默认的变量名是peopleBean;可以通过@ManagedBean(name="minzu")将受管Bean的变量命名为"minzu"。
    使用@SessionScoped注入,表明该类的变量的作用域在会话范围内。
    PeopleBean.java的内容见附件2。

    1、添加四个属性,并为这四个属性添加set、get方法

        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方法(内容略)。
        这四个属性在MVC层面属于M(数据)。 peopleMap相当于ORM中的实体Bean或者POJO Bean。在JadePool中,用Map代替一切实体Bean或者POJO Bean

    2、记录初始化
        创建初始化方法:

        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()。

    3、导入民族记录
            同行政区划一样,民族记录被打包在jadepool-1.0-GBK中,可以调用China的people()方法导出,导出的记录以List<Map>类型存在,每条记录包含三个键名:minzu、pinxie、daima。在cn_people表中,有三个与导出记录同名字段,它们用来保存同名的导出记录字段。请把原cn_people表中的字段名zimu修改为daima。数据库结构信息修改后,需要重新运行应用程序,以保证JadePool使用的有限多列模式重新加载数据库的结构信息。

        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();
        }
    


    三、完善cn_people.xhtml页面内容
    在cn_people.xhtml页面中,添加Primefaces的p:tabView组件,创建两个tab,一个用于分页浏览,一个用于导入。
    1、导入民族记录
    在tab页初始化民族记录中,按钮的代码如下:
    <p:commandButton value="初始化民族" action="#{peopleBean.guidePeople}" icon="ui-icon-disk" update="@form :bottomForm:bottomGrowl"/>  
    点击“初始化民族”按钮会触发action事件,调用受管Bean的guidePeople方法。update属性调用ajax方法更新指定组件元素的显示,这里更新两个组件元素,@form和 :bottomForm:bottomGrowl,它们之间使用" "空格分开。其中,@form代表当前的表单,:bottomForm:bottomGrowl是指模板网页底部定义的<p:growl/>消息显示组件。

    下图是初始化民族记录返回结果,提示消息由p:growl组件呈现。



    2、浏览民族记录
    浏览民族记录通过使用Primefaces的p:dataTable组件实现。这里,该组件呈现peopleModel数据模型。代码如下:

                        <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用来指定排序的字段。

    民族分页效果图,黄色记录是被选记录




    附件1:cn_people.xhtml

    <?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>




    附件2:PeopleBean.java

    /*
     * 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() + "条!"));
        }
        
    }
    


  • 相关阅读:
    QT5编程入门教程
    bstr_t与BSTR
    Android Studio 更改APP图标
    Indy服务器关闭所有客户端连接
    使用高德地图API
    内网渗透——Hadoop未授权访问getshell
    内网渗透——struts2远程任意代码执行(s2-046)
    工具使用——cobalt strike使用
    工具使用——docker使用
    漏洞复现——weblogic任意文件上传(cve-2018-2894)
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2992171.html
Copyright © 2020-2023  润新知