实体类:
package com.example.demo.entity;
public class User {
private String username;
private String password;
public User(){}
public User(String username,String password){
this.username=username;
this.password=password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
后台Controller: 这个很清楚吧应该,在地址栏输入localhost:8080/index的时候,model已经运行完了,然后在返回的index页面就能看见model传递过的这些值。
@ModelAttribute
public void model(Model model){
User user=new User("xiaoming","123456");
//传对象
model.addAttribute("user",user);
//传字符串
model.addAttribute("string","后台传递过来的字符串");
//传map
Map map=new HashMap();
map.put("user1",user);
model.addAttribute("map",map);
//传递列表
List list=new ArrayList();
list.add(user);
list.add(user);
model.addAttribute("list",list);
}
@RequestMapping("index")
public String index(){
return "index";
}
这里把需要的字符串,map,list,对象,都用model来存储,然后在前台提取。
前台代码:
从后台获取的用户名和密码:<%=request.getAttribute("user").toString()%>
${user.username} ${user.password}
${string}
后台传过来的map${map.get("user1").toString()}
后台传过来的列表${list.get(0)}
运行效果:
js是无法读取el表达式的,所以,通常后台与js的通信是通过一种轻量级的传输方式来进行的,那就是json。所以,在后台我们需要向前台传递json,然后前台来读取展示。
后台Controller:
下面是专为json的两个方法,JSONArray用来转数组,字符串,list,JSONObject用来转map,对象。
//可以把实体类,实体类数组,list,map,字符串,等等转化为json形式
public static String toJson1(Object result)
{
if(result!=null){
JSONArray obj=JSONArray.fromObject(result);
return(obj.toString());
}
return null;
}
public static String toJson2(Object result)
{
if(result!=null){
JSONObject obj=JSONObject.fromObject(result);
return obj.toString();
}
return null;
}
下面是model函数的完整版:
@ModelAttribute
public void model(Model model){
User user=new User("xiaoming","123456");
//传对象
model.addAttribute("user",user);
//传字符串
model.addAttribute("string","后台传递过来的字符串");
//传map
Map map=new HashMap();
map.put("user1",user);
model.addAttribute("map",map);
//传递列表
List list=new ArrayList();
list.add(user);
list.add(user);
model.addAttribute("list",list);
//对象转json
model.addAttribute("json_user",toJson2(user));
//字符串转json
model.addAttribute("json_string",toJson1("['json is easy']"));//一定要放进[]里
//list转json
model.addAttribute("json_list",toJson1(list));
//map转json
model.addAttribute("json_map",toJson2(map));
}
然后是index页面的js:
话不多说,直接上前台jsp模拟登录的html代码和js的代码:
很容易看出,我在js里写了一个对象,和一个对象数组,我的目标就是向后台传递对象和对象数组,上面的代码传递的是对象数组,修改data:{ObjectUser:JSON.stringify()}括号里的值即可实现切换,不赘述。另外,这个ObjectUser是传到后台的一个名字,后台可以用request.getParameter("ObjectUser")来接受,也可以直接给要接受的函数加一个注解参数:
@RequestParam String ObjectUser
后台controller:
//接收前台向后台传值
@RequestMapping("getdata")
@ResponseBody
public Object getdata(@RequestParam String ObjectUser){
//System.out.println(1);
JSONObject userObject=JSONObject.fromObject(ObjectUser);
//System.out.println(1);
User user=(User)userObject.toBean(userObject,User.class);
System.out.println(user.getUsername()+user.getPassword());
return "success";
}
@RequestMapping("getdata1")
@ResponseBody
public Object getdata1(@RequestParam String ObjectUser){
JSONArray userObject=JSONArray .fromObject(ObjectUser);
for(int i=0;i
分别对应着接收对象和对象数组的函数。
地址栏输入localhost:8080/index
输入用户名和密码:haha 123456
前台ajax里的datatype设置为text才能读取到后台传入的success的字符串格式,才能进行跳转;
后台涉及到ajax的函数,不要忘了@RequestBody,这样才能进行json的传输,另外函数的返回值不能是String,否则返回的是success.jsp的html代码