LigerUI通过Struts2返回并显示

来源:互联网 发布:c语言 变量初始化顺序 编辑:程序博客网 时间:2024/06/05 21:08

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

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

[java] view plain copy
  1. public List<NewsList> findAllNews() {  
  2.         //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";  
  3.         String sql="SELECT * from NewsList order by infoIndex desc";  
  4.         List<NewsList> nl=new ArrayList<NewsList>();  
  5.         JSONArray array=sqlHelper.query(sql);  
  6.         for (int i = 0; i < array.size(); i++) {  
  7.             JSONObject object=array.getJSONObject(i);  
  8.             NewsList newslist=(NewsList) ConvertJsonToObj.Convert(object, NewsList.class);  
  9.             nl.add(newslist);  
  10.         }  
  11.         return nl;  
  12.     }  

第二步:在Action层中获取List,并转换成符合LigerUI的Json数组(需要在前面创建一个JSONObject对象 放入rows)
[java] view plain copy
  1. public String findAllNews(){  
  2.         List<NewsList> list=this.newlistListDao.findAllNews();  
  3.         HashMap<String, Object> maps=new HashMap<String, Object>();  
  4.         List<HashMap<String, Object>> lists=new ArrayList<HashMap<String,Object>>();  
  5.         for (NewsList os : list) {  
  6.             HashMap<String, Object> hashmaps=new HashMap<String, Object>();  
  7.             hashmaps.put("infoid",os.getInfoid());  
  8.             hashmaps.put("infoTitle", os.getInfoTitle());  
  9.             hashmaps.put("infoType",os.getInfoType());  
  10.             lists.add(hashmaps);  
  11.         }  
  12.         maps.put("rows", list);  
  13.         maps.put("total", list.size());//需要写进Json中,告诉LigerUI一共有多少数据  
  14.         rows=JSONObject.fromObject(maps);  
  15.         System.out.println(rows);  
  16.         return BaseAction.SUCCESS;  
  17.     }  

第三步:在Struts.xml文件中配置
[java] view plain copy
  1. <action name="findAllNews" class="com.fudian.actions.NewsListAction" method="findAllNews">  
  2.            <result type="json">  
  3.               <param name="root">rows</param>  
  4.            </result>  
  5.         </action>  
第四步:前台JSP配置
[javascript] view plain copy
  1.  $(function ()  
  2.         {  
  3.             window['g'] =  
  4.             $("#maingrid").ligerGrid({  
  5.                 height: '99.2%',  
  6.                 columns: [  
  7.                 {display:'新闻标题', name:'infoTitle', align: 'left', width: 400 },  
  8.                 {display:'新闻分类',name:'infoType',align:'left', width: 200},  
  9.                 {display:'更新时间',name:'updateTime',align:'left',width:200},  
  10.                 {display:'发布状态',name:'status',align:'left',width:100,render:function(item){  
  11.                 <span style="white-space:pre">  </span>var str;  
  12.                 <span style="white-space:pre">  </span>if(item.status=="1"){  
  13.                 <span style="white-space:pre">      </span>str="已发布";  
  14.                 <span style="white-space:pre">  </span>}else{  
  15.                 <span style="white-space:pre">      </span>str="未发布";  
  16.                 <span style="white-space:pre">  </span>}  
  17.                 <span style="white-space:pre">  </span>return str;  
  18.                 }},  
  19.                 ],  
  20.                 dataAction:"local",//分页用ligerUI自己的分页  
  21.                 url:'<%=basePath%>fdirms/findAllNews',  
  22.                 root:'rows'//内容需于返回来的名字对应!!  
  23.                 record:'total'//总行数  
  24.                 delayLoad:true,  
  25.                 rownumbers: true,  
  26.                 usePager:true,  
  27.                 pageSize: 20,   
  28.                 rownumbers: true,  
  29.                   
  30.             });  
  31.             $("#pageloading").hide();  
  32.         });   
  33.         $(function(){  
  34.             g.set({  
  35.                 //数据请求地址  
  36.                 url:"<%=basePath%>fdirms/findAllNews",  
  37.                 //数据书否分页,默认为true  
  38.                 usePager:true,  
  39.             });  
  40.              g.loadData(g.changePage('first'));  
  41.         });  

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

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

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

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