hibernate+Struts2+jquery easyui 做分页处理时的一些问题

来源:互联网 发布:史丹利快报淘宝店铺 编辑:程序博客网 时间:2024/06/04 19:23

合在一起做的时候,问题就多了。
1.

  select        count(*) as col_0_0_     from        JBIT.GOODS goods0_

看到上面的sql,马上就会想到,获取所有记录时,面对long型的转换,修改Dao中代码。

Integer.parseInt(session.createQuery(" select count(*) from Goods").uniqueResult().toString())

2.ajax请求时,不报异常,通过浏览器查看状态。
很明显,注意了,看hibernate与struts2有没有配置好,有没有共同的jar包存在,hibernate的xml文件有没有配置。

500 Internal Server Error

3.这个问题是出在jQuery easy ui 上的。看英语,说明rows参数有问题。

Method "setRows" failed for object action.GoodsAction@3c3d683a

先说一下分页的配置。

 $('#dg').datagrid({            url : 'goods',            method:'get',            columns : [ [ {                field : 'id',                title : '编号',                width : 100            }, {                field : 'name',                title : '名称',                width : 100            }, {                field : 'price',                title : '价格',                width : 100,                align : 'center'            },{                field : 'opr',                title : '操作',                width : 100,                align : 'center',                formatter : function(value, row, index) {                    return "<a href='javascript:oprdata("+                     row.id +                    ")'>删除</a>";                }            }             ] ],            fitColumns : true,//自适应宽度,防止水平滚动            iconCls:'icon-search',            striped:true ,//隔行变色            pagination : true,//显示底部分页栏            pagePosition : "bottom",                 $('#dg').datagrid({            url : 'goods',            method:'get',            columns : [ [ {                field : 'id',                title : '编号',                width : 100            }, {                field : 'name',                title : '名称',                width : 100            }, {                field : 'price',                title : '价格',                width : 100,                align : 'center'            },{                field : 'opr',                title : '操作',                width : 100,                align : 'center',                formatter : function(value, row, index) {                    return "<a href='javascript:oprdata("+                     row.id +                    ")'>删除</a>";                }            }             ] ],            fitColumns : true,//自适应宽度,防止水平滚动            iconCls:'icon-search',            striped:true ,//隔行变色            pagination : true,//显示底部分页栏            pageNumber : 1,//pagination : true时才生效                  pageSize:10,//每页显示的记录条数,默认为10                 //pageSize: defaultPageSize,                pageList: [10,15,30,45],//可以设置每页记录条数的列表                           beforePageText: '第',//页数文本框前显示的汉字                           afterPageText: '页    共 {pages} 页',                displayMsg: '当前显示 {from} - {to} 条记录   共 {total} 条记录'            pagePosition : "bottom",                            rownumbers:true,//行号             loadMsg : "玩命加载中",            singleSelect : true,//只让单选            frozenColumns:[[            {field:'ck',checkbox:true} ]],             title:"商品订单管理"        });                         rownumbers:true,//行号             loadMsg : "玩命加载中",            singleSelect : true,//只让单选            frozenColumns:[[            {field:'ck',checkbox:true} ]],             title:"商品订单管理"        }); 

这样配置是不会出现上面的异常,若少了pageList: [10,15,30,45],就可能报了。
当然了,有的人喜欢把分页的那几个单独的提出来:

 var p = $('#dg').datagrid('getPager');            $(p).pagination({                pageNumber : 1,//pagination : true时才生效                  pageSize:10,//每页显示的记录条数,默认为10                 //pageSize: defaultPageSize,                pageList: [10,15,30,45],//可以设置每页记录条数的列表                           beforePageText: '第',//页数文本框前显示的汉字                           afterPageText: '页    共 {pages} 页',                displayMsg: '当前显示 {from} - {to} 条记录   共 {total} 条记录'            });

注意了,这样写,肯定是没问题,但是如果你在pageList: [10,15,30,45],写了pageList: [5,10,15,30,45],那么第一页依旧还是显示的是默认值10条记录。这时你就需要写额外的代码控制只出现5行了。麻烦。
4.Json 数据的struts的配置。

<package name="default" namespace="/"  extends="json-default">        <action name="goods" class="action.GoodsAction" method="execute">            <result type="json">                <param name="root">map</param>            </result>        </action>

还有action的写法,也贴出来。

public class GoodsAction extends ActionSupport {    private int page;    private int rows;    private Map<String ,Object> map;    public int getPage() {        return page;    }    public void setPage(int page) {        this.page = page;    }    public int getRows() {        return rows;    }    public void setRows(int rows) {        this.rows = rows;    }    public Map<String, Object> getMap() {        return map;    }    public void setMap(Map<String, Object> map) {        this.map = map;    }    /**     * @return     */    public String execute() {        if (page<=0) {            page=1;        }           map=new HashMap<String, Object>();        IGoodsBiz biz=new GoodsBizImpl();        int totalCount=biz.findCount();        List<Goods> list=biz.findPage(page, rows);        map.put("total", totalCount);        map.put("rows", list);        System.out.println(totalCount);//测试用        System.out.println(list.size());//测试用        return SUCCESS;    }}

贴一个删除的方法。先设置。

{                field : 'opr',                title : '操作',                width : 100,                align : 'center',                formatter : function(value, row, index) {                    return "<a href='javascript:oprdata("+                     row.id +                    ")'>删除</a>";                }            }jquery 方法。ajax请求

function oprdata(id){
if (confirm(“确认删除吗?”)) {
.get(“deleteGoods”, {“id”:id}, function(data){  
                if(data==1){  
                    //刷新数据
(‘#dg’).datagrid(‘reload’);
}
}
)};
“`
不得不提的是,上面的配置分页时,如果你写了method:’get’,在某些时候,比如对数据做了增删改,数据已经修改了,但是页面不刷新,考虑将get换成post,或者直接去掉。亲测有效。
做的时候,一步一个脚印,先分析逻辑,再写代码,项目还是很好写的。

0 0
原创粉丝点击