先把自己知道的写出来 后面持续更新
把前台的参数传递到Controller中
1:可以在方法中传递request 对象
如: @RequestMapping("/queryUser") public ModelAndView queryUser(HttpServletRequest request) throws IOException{ //设置request 中的编码格式 防止中文乱码 request.setCharacterEncoding("utf-8"); String trueName = request.getParameter("trueName"); 、}
2:通过参数绑定和上面在方法中一样 在里面传入 从页面传过来参数的类型和值 比如 Sting name
public ModelAndView queryUser(String name) throws IOException{ 在代码里就可以获取到name的值
其实这种方法 跟request.getParameter("name") z结果是一样的
如果是form 表单的话就是一个数组了 String[] id
request.getParameterValues(“id"”) 一致
、}
以上两种大体来讲性质是一样的 都是通过name来获得 前台的值 并且它们前台的名称 和后台的名称 得保持一致
3:通过@RequestParam(value="id") 来绑定request传过来的值
public ModelAndView queryUser(@RequestParam(value="id")Integer id_test) throws IOException{ 代码里直接可以把id_test 拿来用 通过@RequestParam 参数绑定 就消除了名称一直的问题
、}
那么问题来了既然request都可以获取到前台传递过来的参数 为什么还会有2,3两种方式呢?????
不传request,减少侵入性,更符合MVC的的设计思想 本人猜想 欢迎各位网友指正
4:将对象绑定到方法中 UserVo 这个类可以是组装的类 spring mvc中没有对此有特定的要求
public String enterUpdateUser(UserVo userVo){
}
页面如:
<input type="text" name="address" value="dd"/>
注意:在前台穿过来的参数(address)必须为为类UserVo的属性 并且有相应属性的set方法
这样才可以将值设进类UserVo中
这种方法的特点是这个对象必须在程序中存在这个类 并且前台穿过来的所有参数都得是这个类中的属性
然后可以通过get 方法将所有的属性获取到
5:这种方法是方法4的升级版,因为方法4传递的是一个对象,一般实际开发中把form 表单提交的话 就会涉及到多个对象 所以我们就需要将对象装进一个List集合中(listUser) 所以我们就会在方法中继续封装一个类(ListTest)中, 同时这个类会把 listTest 当做他自己的一个属性 并且有get/set方法
可以在方法中传递集合 不过集合中必须存放 方法4中的类 如:
组装类:
public class ListTest { List<User> listUser; public List<User> getListUser() { return listUser; } public void setListUser(List<User> listUser) { this.listUser = listUser; } }
Controller方法
public String enterUpdateUser(ListTesttest){
}
jsp页面:<td><input type="text" name="listUser[0].address" value="${user.address}" /></td> <td><input type="text" name="listUser[0].id" value="${user.id}" /></td>
<td><input type="text" name="listUser[1].address" value="${user.address}" /></td> <td><input type="text" name="listUser[1].id" value="${user.id}" /></td>
<td><input type="text" name="listUser[2].address" value="${user.address}" /></td> <td><input type="text" name="listUser[2].id" value="${user.id}" /></td>
这样的话就将页面三个对象(User)封装了起来 放进了List(listUser)中 并且把List作为组装类(ListTest)的普通属性
动态生成序号的方式
<c:forEach items="${usersList }" var="user" varStatus="status"> <tr> <td width="2%"><input type="checkbox" name="listUser${status.index}" id="check" value="${user.id}"></td>
</c:forEach>
6:方法6也是将数据通过JSON字符串传给后台不
先普及下Json字符串和Json对象的区别
json字符串:var b = '{"title":"JavaScript高级程序设计","authors":"aa","edition":"3","year":"2011"}' ;
json对象: var object ={"name":"tom","sex":"男","age":"23"};
Json.parse(b) 将Json字符串转换为 Json对象
Json.stringify(object); 将Json对象转换为Json字符串
两者的区别就是字符串只一个整体用单引号括起来的 后者是直接放在一个大括号里面 是一个对象
在js中一般通过解析[object,object]类型的数据
@RequestBody 可以获取从前台传过来的Json字符串 这样就可以将前台拼接的Json字符串接收
并且将对象放进到List<User>中
@ResponseBody 是将Json对象数据响应给前台 如果return 返回的值是字符串格式的就会将其作为页面解析
如果return返回值是 json对象的话 就会将其原样返回
好了言归正传,将前台的数据组装成Json字符串并且将其传回Controller中,如下方法
@ResponseBody @RequestMapping(value="/enterUpdateUser", method={RequestMethod.POST,RequestMethod.GET}) public String enterUpdateUser(@RequestBody List<User> user){ System.err.println(user.toString()); System.out.println(user.get(0).getAddress()); return "{\"result\":\"success\"}"; 或者 return "sucess"; 这两种涉及到ajax 中提交中的dataType 类型
}
前台页面:
function query(){ var userList= new Array();
Json对象:
userList.push({id:"1",address:"江西南昌 "}); userList.push({id:"2",address:"上海虹口 "}); $.ajax({ url:"${pageContext.request.contextPath}/user/enterUpdateUser.action", type:"post", data:JSON.stringify(userList),//将Json对象转换为json字符串 dataType:"json",//传递到Controller的数据类型 类型也可以为text 这样Controller 返回字符串也能够接收 contentType:"application/json",//响应的数据 success:function(data){ alert(JSON.stringify(data)); for(var a in data){ alert(a); alert(data[a]); var value = $("input[name='listUser[2].address']").val(); $("input[name='listUser[2].address']").val("测试数据"); } },error:function(data){ } }); }
这样就可以实现 前台单个参数,多个参数,对象,集合的形式进入Controller 中了 不过这些方法都是可以通过获取request中的值来实现
7 前台通过CheckBox的方式传递被选中的CheckBox
JSP页面中:
<input type="button" value="测试 " οnclick="submit()">
<form id="test" action="......../array.action" method="get">
<input type="checkBox" name="totCheck" id="totCheck" οnclick="array()" value="全选框">
<c:forEach items="${list} " var=“str">
<input type="checkBox" name="id" id="test_box" value="${id} />
</c:forEach>
</form>
javaScript:
function array(){
//当点击全选框时 如果全选框已经被选中 则将所有选中的子checkBox 取消全选
如果全选框未被选中怎讲下面的子checkBox 选中 具体代码实现如下
if($("input[name='totCheckBox']").attr("checked")=="checked") {
//两种方式全选
$("input[name='id']").each(function(){
$(this).attr("checked",true);
});
//或者 也是将所有的子checkBox选中
$("input[name='id']").attr("checked",true);
}else{
$("input[name='id']").attr("checked",false);
}
}
后台代码获取:
注意:Integer 这个一定要是包装类 不能是基本数据类型
@RequestMapping("/array") public String arry(Integer[] id){ System.out.println(id.length); return "string"; }