1、js中遍历对象用$.each()。
方法中有2个参数:
第1个参数:要迭代的对象,是Map集合的key值,Map集合的key值对应的value值比如是一个List集合,集合存储的比如是一个个User对象
第2个参数:function(),function()接收2个参数:
第1个参数:迭代对象的索引
第2个参数:是一个形参,名称随便给。迭代对象一般是什么起什么,见名知意即可
例:
//userList是要迭代的对象,是Map集合的key值,对应的value值需要是一个List集合
$.each(data.userList, function(index, u){
})
如果要把遍历出来的一个个对象中的某些成员变量需要追加到select下拉框中(select复选框追加的则是一个个option选项),如下:
var userName = $("#toCompName").empty() //先要将下拉框清空,toCompName是select标签的属性id的值,赋值给userName变量
$.each(data.userList, function(index, u){
//此时的select复选框的名称是赋值给userName变量的名称,追加用append(),追加一个个option选项,option标签的value值是真值,另一个则是显示值,真值与显示值的u.name,u是function()的第二个参数名称,name是userList对应的value值,value值比如是一个List集合,集合存储的比如是一个个User对象,User对象有成员变量name,也就是这个name是根据Map集合的value值集合存放的是什么对象,真值和显示值是对象的成员变量
userName.append("<option value='" +u.name+ "'>" +u.name+ "</option>")
})
2、用ID选择器分别获取文本框的值和下拉框的值
获取文本框的值:$("#id属性值").val();
//例:获取id属性值为toCompDept文本框的值
$("#toCompDept").val();
获取下拉框的值:$("#id属性值 option:selected").val();
//例:获取id属性值为toCompDept下拉框的值
$("#toCompDept option:selected").val();
清除下拉框文本框的值:$("#属性值").empty();
//例:清除id属性值为toCompDept文本框的值
$("#toCompDept").empty();
3、innerText和innerHTML的区别
innerText:往一对“标签”设置文本内容
innerHTML:可以获取或修改某个HTML标签内包含的内容
4、返回一个json字符串
方式1:没有框架的情况下(直接用输出流输出json格式字符串)
控制层方法返回的数据类型为void。将整个查询出来的对象变成一个个json对象,步骤如下
step1、需要引入3个jar包:
commons-beanutils-1.8.0.jar、ezmorph-1.0.6.jar、json-lib-2.3-jdk15.jar
step2、创建json对象,导包的时候导入的是net.sf.json.JSONObject
JSONObject json = new JSONObject();
json.put("msg", "success");
json.accumulate("userList", userService.findObjects(queryHelper)); //第二个参数userList是查询出来的对象。查询出来的对象转成一个个json对象
step3、输出查询出来的列表对象,以json格式字符串形式输出
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html");
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(json.toString().getBytes("utf-8"));
outputStream.close();
方式2:有框架的情况下(使用的是struts2,使用插件包将控制层中对应的对象自动生成json格式字符串)
控制层方法返回值类型为String。
step1、引入struts2与json的插件包:
struts2-json-plugin-2.3.20.jar
setp2、返回json对象
成员位置定义一个变量,变量的数据类型为Map<String, Object>,并生成该变量的get(),不需要set();
然后在要返回json格式的方法中实例化刚刚定义的map集合;
给map集合放值。用刚定义的变量名称.put(),put()参数类型为(String key, Object value)。标识一下是否成功,页面可以选择去用;然后再用刚定义的变量名称.put(),put()参数类型为(String key, Object value),第一个参数key值表示的是要传给jsp页面要遍历的对象的名称,第二个参数是要查询的对象,与方式1的accumulate()的意思其实是一样的。
//例:返回json对象
return_map = new HashMap<String, Object>(); //实例化
return_map.put("msg", "success");
return_map.put("userList", userService.findObjects(queryHelper)); //第二个参数是要查询的对象。视图页面要迭代的数据集合
step3、struts配置文件中的package元素extends属性值除了struts-default,还要json-default,这两个逗号隔开即可。
result元素只需要配置type属性,type属性值为json,容器就会把action中的属性自动封装到一个json对象中返回json数据;因为action中方法return的是SUCCESS,所以result元素的name属性默认值就是success。
result元素的子元素param元素的name属性值指定为root,param元素的值就是在控制层定义数据类型为Map<String, Object>的变量名称。
*如果param元素的值没有显示指定Map属性,也就是Map<String, Object>的变量名称,则struts会将action中所有以get开头的方法的返回值都会自动生成json字符串返回给浏览器了,所以param元素的配置意思是:指定变量对应的get开头方法的返回值自动转成json格式字符串。