先把自己知道的写出来 后面持续更新
把前台的参数传递到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";
}