action : public String list() { try { List<UserBean> ulist = userService.getAllUser(); Map<String, Object> map=new HashMap<String, Object>(); map.put("total",new Integer(ulist.size())); map.put("rows",ulist); JSONArray json = JSONArray.fromObject(map); dataString = json.toString(); dataString = dataString.substring(1, dataString.length()-1); log.info("dataString: "+dataString); return SUCCESS; } catch (Exception e) { log.error("----------error----------", e); return "error"; } } struts.xml : <action name="listUser" class="com.myssh.demo.action.UserAction" method="list"> <result name="success" type="json" > <param name="root">dataString</param> </result> <result name="error">/WEB-INF/jsp/error.jsp</result> </action> jsp : <table id="mydatagrid" class="easyui-datagrid" title="DataGrid Complex Toolbar" style="width:700px;height:250px" data-options="rownumbers:true,singleSelect:true,url:""<c:url value="userinfo/listUser"/>"", method:""get"",toolbar:""#tb"",loadFilter: function(data){ alert(data); }"> <thead> <tr> <th data-options="field:""id"",width:80">id</th> <th data-options="field:""name"",width:100">name</th> <th data-options="field:""password"",width:80,align:""right""">password</th> </tr> </thead> </table> 刚开始用这个easyui, jsp是在官网的demo拷出来的,原来url:‘datagrid_data1.json’ |
|
自己顶一下
|
|
10分 |
return返回值不应该是map吗
|
5分 |
datagrid是ajax请求
|
10分 |
1.首先你确认已经跑到后台了,如果已经调用actin
2.如果已经调用到action,我目测问题是这样的,你调下试试 把JSONArray json = JSONArray.fromObject(map); 换成 private JSONObject json; set get方法 json = JSONObject.fromObject(map); |
你转成 json后
dataString = dataString.substring(1, dataString.length()-1); 这个干嘛去掉{} ? |
|
改了不行 在jsp页面的打印[object,object] 还是不显示 |
|
因为这样就和他官方的demo一致了 {“total”:28,”rows”:[{},{},{}]} 不然就会多一个”[]” |
|
alert(data.total)
|
|
这个是意思的 |
|
10分 |
你浏览器调试看看 。data 里面是怎么放数据的 F12
|
现在data就是string 内容就是 {“total”:19,”rows”:[{“id”:”a”,”name”:”s”},{…},{…}]}
|
|
你这样在前台的easyui得到的不是一个json对象,而是一个字符串,你加上struts-json包,就直接传list对像就行了,不用那么麻烦了
|
|
20分 |
string不行的,easyui接的是json对象而不是一个json转后的字符串。。。加上struts2-json-plugin.jar这个插件,然后后台你就不用管了,直接似list对象,在前台会自动转化为json对象,正确显示在datagrid上面了、、、、 |
直接 把这个 ulist(加了get/set方法) 传到前台 也没有显示 |
|
配置文件
<property name="mediaTypes"> <map> <entry key="json" value="application/json" /> <entry key="xml" value="application/xml" /> </map> </property> F12看前台URL是否有值;ajax请求的代码贴下 |
|
我自己写的alert的地方会打印出值 ,没有ajax请求的代码 |
|
5分 |
$("#buttonGrid").datagrid({ url:appPath+""/page/button/buttonlist"", height : 550, striped: true, remoteSort:false, queryParams: getQueryParam(), idField:""buttonCode"", checkbox:true, frozenColumns:[[ {field:""ck"",checkbox:true}, {field:""opt"",title:""操作"",width:32,align:""center"", formatter:function(value,rowData,rowIndex){ var dataStr = JSON.stringify(rowData); return "<img class=""op-enable"" src="""+appPath+"/js/lib/jquery-easyui/themes/icons/pencil.png"" title=""编辑"" onClick=""showEdit("+dataStr+")""/>"; } } ]], columns:[[ {field:""buttonCode"",title:""按钮编码"",width:100,align:""left"",sortable:true}, {field:""buttonName"",title:""按钮名称"",width:100,align:""left"",sortable:true}, {field:""buttonType"",title:""按钮类型"",width:100,align:""left"",sortable:true}, {field:""username"",title:""添加人"",width:100,align:""left"",sortable:true}, {field:""addTimeString"",title:""添加时间"",width:200,align:""left"",sortable:true}, {field:""editTimeString"",title:""修改时间"",width:200,align:""left"",sortable:true}, {field:""isDelete"",title:""是否删除"",width:400,align:""left"",sortable:true} ]], 这样写试过没有 |
$("#buttonGrid").datagrid({ url:appPath+""/page/button/buttonlist"", height : 550, striped: true, remoteSort:false, queryParams: getQueryParam(), idField:""buttonCode"", checkbox:true, frozenColumns:[[ {field:""ck"",checkbox:true}, {field:""opt"",title:""操作"",width:32,align:""center"", formatter:function(value,rowData,rowIndex){ var dataStr = JSON.stringify(rowData); return "<img class=""op-enable"" src="""+appPath+"/js/lib/jquery-easyui/themes/icons/pencil.png"" title=""编辑"" onClick=""showEdit("+dataStr+")""/>"; } } ]], columns:[[ {field:""buttonCode"",title:""按钮编码"",width:100,align:""left"",sortable:true}, {field:""buttonName"",title:""按钮名称"",width:100,align:""left"",sortable:true}, {field:""buttonType"",title:""按钮类型"",width:100,align:""left"",sortable:true}, {field:""username"",title:""添加人"",width:100,align:""left"",sortable:true}, {field:""addTimeString"",title:""添加时间"",width:200,align:""left"",sortable:true}, {field:""editTimeString"",title:""修改时间"",width:200,align:""left"",sortable:true}, {field:""isDelete"",title:""是否删除"",width:400,align:""left"",sortable:true} ]], 这样肯定是可以的,但是我需要不要操作过多js的方式 |
|
Ajax不是需要response响应吗
|
|
看来没人这么做过
|
|
问题解决了没?我也遇到了这么奇葩的问题,郁闷啊!
|
|
万恶的 这两天我也遇到这样的问题了 一天了都没有解决 LZ怎么解决的?
|
|
你的问题解决了吗? |
|
把获得的json 外层的[ ]去掉 用substring
|
|
@Action(value=”getJsonList”,results={
@Result(name=”json”, type=”json”, params={“root”,”total”,”root”,”rows”}) }) public String getJsonList() throws SQLException{ rows = tdi.test(); total = rows.size(); return “json”; } 这样配置试试,我的这样弄是可以显示的 |
|
还有,easyui不支持带有特殊字符的路径,如~这样的字符。
|
|
用data代替url也可以解决这个问题,直接把字符串用ajax传到页面,再用eval()转成json对象,给data:就可以了
|
|
整列隐藏的话用这个<th data-options=”field:””id””,width:180,sortable:””ture””,align:””center””,hidden:true”>id</th>
主要是这个 hidden:true <%–id已隐藏–%> |