项目需求:需要把数据显示到表格中。表格用的是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的分页语句,性能比较好的。需要借鉴的同学可以借鉴。