Code Bye

easyui-datagrid url 调用action 数据在table中不显示

 

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’
能显示 ,后改成action地址就不显示了 
确认action已经被调用(log打印了)
确认返回的json格式正确,jsp上有alert(data)的 和demo里的一样
网上搜索了一圈没有结果
请指教

自己顶一下

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); 这个干嘛去掉{}    ?

引用 7 楼 ntwangshuaiok 的回复:

1.首先你确认已经跑到后台了,如果已经调用actin
2.如果已经调用到action,我目测问题是这样的,你调下试试
把JSONArray json = JSONArray.fromObject(map);
换成 private JSONObject json;
     set get方法

     json = JSONObject.fromObject(map);

改了不行 在jsp页面的打印[object,object] 还是不显示

引用 8 楼 rui888 的回复:

你转成  json后

dataString = dataString.substring(1, dataString.length()-1); 这个干嘛去掉{}    ?

因为这样就和他官方的demo一致了 {“total”:28,”rows”:[{},{},{}]} 不然就会多一个”[]” 
这个地方不写 也是不能显示的

alert(data.total)
引用 11 楼 rui888 的回复:

alert(data.total)

这个是意思的
我把alert(data);改成alert(data.total) 打印的是 undefined


10分
你浏览器调试看看 。data 里面是怎么放数据的  F12
现在data就是string 内容就是  {“total”:19,”rows”:[{“id”:”a”,”name”:”s”},{…},{…}]}
你这样在前台的easyui得到的不是一个json对象,而是一个字符串,你加上struts-json包,就直接传list对像就行了,不用那么麻烦了

20分
引用 14 楼 caoyanan_com 的回复:

现在data就是string 内容就是  {“total”:19,”rows”:[{“id”:”a”,”name”:”s”},{…},{…}]}

string不行的,easyui接的是json对象而不是一个json转后的字符串。。。加上struts2-json-plugin.jar这个插件,然后后台你就不用管了,直接似list对象,在前台会自动转化为json对象,正确显示在datagrid上面了、、、、

引用 16 楼 hjw506848887 的回复:
Quote: 引用 14 楼 caoyanan_com 的回复:

现在data就是string 内容就是  {“total”:19,”rows”:[{“id”:”a”,”name”:”s”},{…},{…}]}

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请求的代码贴下

引用 20 楼 huasuan26 的回复:

配置文件

<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}
		      ]],

这样写试过没有

引用 22 楼 huasuan26 的回复:
$("#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怎么解决的?
引用 27 楼 IceCrystalKin 的回复:

问题解决了没?我也遇到了这么奇葩的问题,郁闷啊!

你的问题解决了吗?

把获得的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已隐藏–%>

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明easyui-datagrid url 调用action 数据在table中不显示