package com.bob.analyst.admin.controller;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
import com.bob.analyst.admin.aop.Role;
@Controller
@RequestMapping("/parmas")
public class ParamsController {
/**
* 通过参数名称和HTTP请求参数的名称保持一致来获取参数,如果不一致没法获取到,这样的方式允许参数为空
* @param roleName 角色名称
* @param note 备注
* @return 到index视图
*/
@RequestMapping("/commonParams")
public ModelAndView ModeAndViewcommonParams(String roleName,String note){
System.out.println(".......roleName:"+roleName);
System.out.println(".......note:"+note);
ModelAndView mv=new ModelAndView();
mv.setViewName("index");
return mv;
}
/**
* 通过POJO的属性也要和HTTP请求参数名称保持一致
* @param role
* @return
*/
@RequestMapping("/commonParamPojo")
public ModelAndView ModeAndViewcommonParamPojo(Role role){
System.out.println(".......roleName:"+role.getRoleName());
System.out.println(".......note:"+role.getNote());
ModelAndView mv=new ModelAndView();
mv.setViewName("index");
return mv;
}
/**
* 通过注解@RequestParam 把 roleName改为 role_name,默认被此注解的参数是不能为空,否则系统抛出异常
* 可以@RequestParam(value="role_name",required=false)这样就可以为空
* @param roleName 使用 @RequestParam("role_name") 指定映射HTTP参数名称
* @param note
* @return
*/
@RequestMapping("/requestParam")
public ModelAndView ModeAndViewrequestParam(@RequestParam("role_name") String roleName,String note){
System.out.println(".......roleName:"+roleName);
System.out.println(".......note:"+note);
ModelAndView mv=new ModelAndView();
mv.setViewName("index");
return mv;
}
/**
* {id}:代表接受一个参数,可以为空
* @PathVariable:表示从URL地址中获取参数
* @param id
* @return Json视图
*/
@RequestMapping("/getRole/{id}")
public ModelAndView ModeAndViewpathVariable(@PathVariable("id") Long id){
System.out.println(".......id:"+id);
ModelAndView mv=new ModelAndView();
mv.addObject("放查询出来的对象");
mv.setView(new MappingJackson2JsonView());
return mv;
}
/**
* @RequestBody:表示要求Spring MVC将传递过来的JSON数组数据转换为对应的Java集合类型
* @param role
* @return
*/
@RequestMapping("/findRoles")
public ModelAndView ModeAndViewfindRoles(@RequestBody Role role){
System.out.println(".......id:"+role.getRoleName());
System.out.println(".......Limit:"+role.getPageParams().getLimit());
ModelAndView mv=new ModelAndView();
mv.addObject("放查询出来的对象");
mv.setView(new MappingJackson2JsonView());
return mv;
}
/**
* @RequestBody:表示要求Spring MVC将传递过来的JSON数组数据,转换为对应的Java集合类型
* @param idList
* @return
*/
@RequestMapping("/deleteRoles")
public ModelAndView deleteRoles(@RequestBody List<Long> idList){
System.out.println(".......idList:"+idList);
ModelAndView mv=new ModelAndView();
mv.addObject("放查询出来的对象");
mv.setView(new MappingJackson2JsonView());
return mv;
}
/**
* 通过表单序列化,就是将表单数据转换为字符串后传递给后台,
* 后台得到的数据就是字符串的形式:roleName=xxxxx&¬e=xxx
* @param roleName
* @param note
* @return
*/
@RequestMapping("/commonParamPojo2")
public ModelAndView ModeAndViewcommonParamPojo2(String roleName,String note){
System.out.println(".......roleName:"+roleName);
System.out.println(".......note:"+note);
ModelAndView mv=new ModelAndView();
mv.addObject("放查询出来的对象");
mv.setView(new MappingJackson2JsonView());
return mv;
}
/**
* Spring MVC有一个约定,当返回的字符串带有 redirect的时候,它就会认为需要的是一个重定向,也可以通过视图来实现
* Model model 换成 ModelAndView mv
* mv.setViewName("redirect:./showRoleJsonInfo.do")
* @param model 为重定向数据模型,Spring MVC会自动初始化它
* @param roleName
* @param note
* @return
*/
@RequestMapping("/addRole")
public String addRole(Model model,String roleName,String note){
Role role = new Role();
model.addAttribute("releName",roleName);
model.addAttribute("note",note);
model.addAttribute("id",role.getId());
return "redirect:./showRoleJsonInfo.do";
}
@RequestMapping("/showRoleJsonInfo")
public ModelAndView ModeAndViewshowRoleJsonInfo(Long id,String roleName,String note){
ModelAndView mv=new ModelAndView();
mv.setView(new MappingJackson2JsonView());
mv.addObject("id",id);
mv.addObject("roleName",roleName);
mv.addObject("note",note);
return mv;
}
@RequestMapping("/showRoleJsonInfo2")
public ModelAndView ModeAndViewshowRoleJsonInfo2(Role role){
ModelAndView mv=new ModelAndView();
mv.setView(new MappingJackson2JsonView());
mv.addObject("role",role);
return mv;
}
/**
* URL在重定向的过程中,并不能有效传递对象,因为HTTP的重定向参数是以字符串传递的。
* 通过flash就可以重定向对象
* @param ra 数据模型
* @param role 对象
* @return 重定向showRoleJsonInfo2
*/
public String addRole3(RedirectAttributes ra,Role role){
ra.addFlashAttribute("role", role);
return "redirect:./showRoleJsonInfo2.do";
}
}
var data={
roleName:'role',
note:'note',
pageParams:{
start:1,
limit:20
}
}
$.post({
url:"./params/findRoles.do",
contentType:"application/json",
data:JSON.stringify(data),
success:function(result){
}
})
var idList = [1,2,3];
$.post({
url:"./params/deleteRoles.do",
data:JSON.stringify(idList),
contentType:"application/json",
success:function(result){
}
})
$.post({
url:"./params/commonParamPojo2.do",
data:$("form").serialize(),
contentType:"application/json",
success:function(result){
}
})