LigerUI通过Struts2返回并显示

来源:互联网 发布:开的淘宝店怎么找不到 编辑:程序博客网 时间:2024/06/05 15:21

项目需求:需要把数据显示到表格中。表格用的是LigerUI,底层用的是Dao层。

完成步骤:第一步:首先从底层开始写获取数据的方法:

public List<NewsList> findAllNews() {//String sql="SELECT w2.n, w1.* FROM NewsList w1, (SELECT TOP "+pages*pageSize+" row_number() OVER (ORDER BY UpdateTime DESC, infoId DESC) n, infoId FROM NewsList) w2 WHERE w1.infoId = w2.infoId AND w2.n > "+(pages-1)*pageSize+" ORDER BY w2.n ASC";String sql="SELECT * from NewsList order by infoIndex desc";List<NewsList> nl=new ArrayList<NewsList>();JSONArray array=sqlHelper.query(sql);for (int i = 0; i < array.size(); i++) {JSONObject object=array.getJSONObject(i);NewsList newslist=(NewsList) ConvertJsonToObj.Convert(object, NewsList.class);nl.add(newslist);}return nl;}

第二步:在Action层中获取List,并转换成符合LigerUI的Json数组(需要在前面创建一个JSONObject对象 放入rows)

public String findAllNews(){List<NewsList> list=this.newlistListDao.findAllNews();HashMap<String, Object> maps=new HashMap<String, Object>();List<HashMap<String, Object>> lists=new ArrayList<HashMap<String,Object>>();for (NewsList os : list) {HashMap<String, Object> hashmaps=new HashMap<String, Object>();hashmaps.put("infoid",os.getInfoid());hashmaps.put("infoTitle", os.getInfoTitle());hashmaps.put("infoType",os.getInfoType());lists.add(hashmaps);}maps.put("rows", list);maps.put("total", list.size());//需要写进Json中,告诉LigerUI一共有多少数据rows=JSONObject.fromObject(maps);System.out.println(rows);return BaseAction.SUCCESS;}

第三步:在Struts.xml文件中配置

<action name="findAllNews" class="com.fudian.actions.NewsListAction" method="findAllNews">       <result type="json">          <param name="root">rows</param>       </result>    </action>
第四步:前台JSP配置

 $(function ()        {            window['g'] =            $("#maingrid").ligerGrid({                height: '99.2%',                columns: [                {display:'新闻标题', name:'infoTitle', align: 'left', width: 400 },                {display:'新闻分类',name:'infoType',align:'left', width: 200},                {display:'更新时间',name:'updateTime',align:'left',width:200},                {display:'发布状态',name:'status',align:'left',width:100,render:function(item){                var str;                if(item.status=="1"){                str="已发布";                }else{                str="未发布";                }                return str;                }},                ],                dataAction:"local",//分页用ligerUI自己的分页                url:'<%=basePath%>fdirms/findAllNews',                root:'rows', //内容需于返回来的名字对应!!                record:'total', //总行数                delayLoad:true,                rownumbers: true,                usePager:true,                pageSize: 20,                 rownumbers: true,                            });            $("#pageloading").hide();        });         $(function(){        g.set({                //数据请求地址                url:"<%=basePath%>fdirms/findAllNews",                //数据书否分页,默认为true                usePager:true,            });     g.loadData(g.changePage('first'));    });

在前台配置的时候需要注意的是:root那项一定要写你在Struts.xml文件配置中对应的返回对象名字,因为这个原因,我找了3个小时的错,才把数据显示出来。

其中我加入了一个render的方法,render方法可以帮助人们把状态的数字改成汉字,我在这里就是判断返回过来的status状态当为1的时候是已发布,其他的时候为未发布。

我这个分页是让LigerUI自己分页,所以在写SQL的时候是直接获取全部数据,所以在dataAction中的值为local 如果要是自己写分页也可以,dataAction的值为server。

如果值为Server的话,需要在Action中获取Pages和pageSize的两个值,并把两个值放进分页语句中。我的分页语句留在上面了,这个是SQL Server的分页语句,性能比较好的。需要借鉴的同学可以借鉴。


原创粉丝点击