SSM三层模型之间的参数传递
Posted 老人与JAVA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSM三层模型之间的参数传递相关的知识,希望对你有一定的参考价值。
Controller接收各种形式的传参:
RequestMapping()包含三部分信息:
表单传参:
1、表单action请求
1:参数名称和顺序都要和表单字段名称一致,直接接收(适合字段较少的)
<from id="viewForm" action="view/first"> <input id="roleName" type="text" name="roleName"/> <input id="roleNum" type="text" name="roleNum"/> <input type="submit" value="提交"/> </from> |
@RequestMapping("/first") public String findName(String roleName,String roleNum){ System.out.println(roleName); System.out.println(roleNum); return "index.jsp"; } |
2:表单中多个字段和一个POJO中属性名称完全对应,则可以对象入参,也不需要注解
@RequestMapping("/add") public String addUser(User user){ System.out.println(user.getName()); return "index.jsp"; } |
3:使用RequestParam注解,表单中的变量名和controller接收中的变量名不一致!
<from id="viewForm" action="view/first"> <input id="roleName" type="text" name="roleName"/> <input id="roleNum" type="text" name="roleNum"/> <input type="submit" value="提交"/> </from> |
@RequestMapping("/first") public String findName(@RequestParam("roleName")String roleName,String roleNum){ System.out.println(roleName); System.out.println(roleNum); return "index.jsp"; } |
或者写成@RequestParam(value="roleName",required=false)
2、表单序列化ajax请求
JS代码:
$("#commit").click(function(){ alert("jingru ajax2"); var param = $("#commit").serialize(); $.ajax({ url:"json", data:param, type:"post", dataType:"json", success:function(result){ alert(result.msg1); $("#josnview").text(result.msg1); }, error:function(){ alert("huidiao失败"); } }); }); |
html代码:
<from id="viewForm"> <input id="roleName" type="text" name="roleName"/> <input id="roleNum" type="text" name="roleNum"/> <input id="commit" type="button" value="提交"/> </from> |
Controller代码:
@RequestMapping("/json") @ResponseBody public String findJson(String roleName, String roleNum){ Map<String,Object> map = new HashMap<String,Object>(); String str1 = roleName; String str2 = roleNum; System.out.println("roleName="+roleName +"roleNum="+roleNum ); map.put("msg1", str1 + str2 +"你好"); return JSON.toJSONString(map); } |
此种方法验证时候,序列化的data无法传到controller中,待解决…
URL传参
4:RESTFul风格,它将只支持http的GET请求。
$("#json").click(function(){ var param ={}; param.gname = "gname"; param.gid = "gid"; $.ajax({ url:"json/"+true, data:param, type:"GET", dataType:"json", success:function(result){ $("#josnview").text(result.msg1); }, error:function(){ alert("huidiao失败"); } }); }); |
@RequestMapping(value="/json/{id}",method=RequestMethod.GET) @ResponseBody public String findJson(@RequestParam(value="gname")String name, @RequestParam(value="gid",required=false)String ps, @PathVariable(value="id")Boolean id){ Map<String,Object> map = new HashMap<String,Object>(); map.put("msg1", name+ps+"你好"+id); return JSON.toJSONString(map); } |
注意:一定要是GET请求。@PathVariable注解允许接收参数为String,Integer,Boolean等!
传递JSON参数
1:原生ajax
A: javascript监听浏览器网页事件(点击,提交,更改等)
B: 创建Ajax引擎对象
C: 配置请求对象的信息
Open()方法还可以设置是否异步req.open( "GET", url, true );
注意:如果是GET请求,则send(null); 如果使用POST请求,就一定要设置请求头,并send(data):
xhr.setRequestHeader("Content-Type","application/x-www-form-u;rlencoded; charset=gb2312");
设置响应超时,在send()之前:
xhr.open(); xhr.ontimeout = function(){ alert(\'request timeout\'); } |
overrideMimeType()方法。
用于重写XHR响应的MIME类型。这对服务器与客户端使用不同编码类型时非常有用。例如在以前如果浏览器使用UTF-8而服务器返回了GBK格式的数据时可能会遇到乱码。而现在就可以用overrideMimeType来解决。
2.$.ajax()方法
可以定义请求失败时的回调函数。$.get() , $.post(),$.getJSON() 则不可以。
1、基本类型入参
Js代码:
$("#json").click(function(){ alert("jingru ajax2"); var param = {}; param.name="1"; param.ps="2"; $.ajax({ url:"json", data:param, type:"post", async:true, dataType:"json", //一般都会预期返回JSON字符串 success:function(result){ alert(result); $("#josnview").text(result.msg); }, error:function(){ alert("回调失败"); } }); }); |
Controller代码
@RequestMapping("/json") @ResponseBody public String findJson(@RequestParam(value="name")String name, @RequestParam(value="ps",required=false)String ps){ Map<String,Object> map = new HashMap<String,Object>(); map.put("msg", name+ps+"你好"); return JSON.toJSONString(map); } |
@RequestMapping("/json") @ResponseBody public Map<String,Object> findJson( @RequestParam(value="name")String name, @RequestParam(value="ps",required=false)String ps){ Map<String,Object> map = new HashMap<String,Object>(); map.put("msg", name+ps+"你好"); return map; } |
2、基本类型的Bean入参
定义一个Bean
public class Goods implements Serializable {
//商品名称 private String gname; private Integer gid; @DateTimeFormat(pattern="yyyy-MM-dd") private Date gtime; private BigDecimal[] nums; //省略get()/set()方法……
} |
Js代码:
$("#json").click(function(){ alert("jingru ajax2"); var param = {}; param.gname = "gname"; param.gid = 2; $.ajax({ url:"json", data:param, type:"post", async:true, dataType:"json", success:function(result){ alert(result); $("#josnview").text(result.msg); }, error:function(){ alert("huidiao失败"); } }); }); |
Controller代码
@RequestMapping("/json") @ResponseBody 以上是关于SSM三层模型之间的参数传递的主要内容,如果未能解决你的问题,请参考以下文章 |