发表于: 2018-04-02 22:51:56
1 717
今天完成的事情:
实现了SSM+CRUD+分页+restful风格
控制器
@Controller
public class CategoryController {
@Autowired
private CategoryService categoryService;
/**
* 分页查询用户信息
* @param pn 默认从第一页开始 请求参数
*/
@RequestMapping(value = "/category", method = RequestMethod.GET)
public String listCategory(@RequestParam(value = "pn", defaultValue = "1") Integer pn, Model model) {
PageHelper.startPage(pn, 10);
List<Category> list = categoryService.list();
PageInfo<Category> pageInfo = new PageInfo(list, 5);
model.addAttribute("pageInfo", pageInfo);
return "listCategory";
}
/**
* 添加用户
*/
@RequestMapping(value = "/category",method = RequestMethod.POST)
public String addCategory(Model model, Category category) {
if (!Objects.equals(category.getName(), "")) {
categoryService.add(category);
}else{
System.out.println("用户名不能为空");
}
return "redirect:/category";
}
/**
* 编辑用户
*/
// @RequestMapping(value = "/category/{id}",method=RequestMethod.PUT)
// public String updateCategory(@PathVariable("id") Integer id, String name,Model model) {
// Category category = categoryService.getById(id);
// category.setName(name);
// model.addAttribute("category",categoryService.update(category));
// return "redirect:/category";
// }
@RequestMapping(value = "/category/{id}", method = RequestMethod.PUT)
public String updateCategory(Category category) {
categoryService.update(category);
return "redirect:/category";
}
/**
* 查询单个用户
*/
@RequestMapping(value = "/category/{id}",method=RequestMethod.GET)
public String getById(@PathVariable("id") Integer id, Model model) {
model.addAttribute("category", categoryService.getById(id));
return "editCategory";
}
/**
* 删除用户
* 重定向是从一个controller跳到另外一个controller
*/
@RequestMapping(value = "/category/{id}",method = RequestMethod.DELETE)
public String deleteCategory(@PathVariable("id") Integer id, Model model) {
model.addAttribute("category", categoryService.delete(id));
return "redirect:/category";
}
}
除了昨天的查询所有用户之外,多了四个控制器分别为,添加,编辑,删除,和查询单个用户。
最终界面如下
1,添加
<div style="text-align: center">
<form action="${path}/category" method="post">
添加分类:<input type="text" name="name"/><br><br>
<input id="reset" type="reset" value="取消"/>
<input id="submit" type="submit" value="新增"/>
</form>
</div>
method方法用的是post,当控制器拦截到url为,method为
的请求,跳转到
@RequestMapping(value = "/category",method = RequestMethod.POST)
public String addCategory(Model model, Category category) {
if (!Objects.equals(category.getName(), "")) {
categoryService.add(category);
}else{
System.out.println("用户名不能为空");
}
return "redirect:/category";
}
结果增加用户数据。
2,编辑
// @RequestMapping(value = "/category/{id}",method=RequestMethod.PUT)
// public String updateCategory(@PathVariable("id") Integer id, String name,Model model) {
// Category category = categoryService.getById(id);
// category.setName(name);
// model.addAttribute("category",categoryService.update(category));
// return "redirect:/category";
// }
@RequestMapping(value = "/category/{id}", method = RequestMethod.PUT)
public String updateCategory(Category category) {
categoryService.update(category);
return "redirect:/category";
}
注释的这里是我之前用的是逐条设置属性的方法,但是如果当字段多起来的话,就会显得代码非常的冗长。后来经师兄点拨,知道了有两个过滤器可以实现这个功能,即直接传对象进来不用逐条设置属性。
需要在web.xml配置过滤器
<!-- 用来过滤rest中的方法,在隐藏域中的put/delete方式,注意 由于执行顺序原因
一定要放在编码过滤器下面,否则会出现编码问题 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
<init-param>
<param-name>methodParam</param-name>
<param-value>_method</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--put请求::获取put表单中的参数-值-->
<filter>
<filter-name>httpPutFormContentFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpPutFormContentFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但在所有用户界面点击编辑
其请求会先被控制器拦截到,进行查询所需要编辑的用户
之后会跳到编辑页面
编辑完成点击修改,
最后,控制器会拦截到,method为
的请求
最终完成修改用户。
3,删除
<form action="${path}/category/${c.id}" method="POST">
<input type="hidden" name="_method" value="DELETE"/>
<input type="submit" value="删除" />
</form>
其中第二行是隐藏域的用法,由于html只支持GET,POST,因此delete和put需要用隐藏域来实现。
@RequestMapping(value = "/category/{id}",method = RequestMethod.DELETE)
public String deleteCategory(@PathVariable("id") Integer id, Model model) {
model.addAttribute("category", categoryService.delete(id));
return "redirect:/category";
}
明天计划的事情:
完成任务二的步骤四
遇到的问题:
之前在实现restful风格的url时,有些细节没有处理好,犯了比较低级的错误。如在用@PathVariable("id")的时候后面没有紧跟在入参Integeer id之后,因此一直报错而找不到原因。
还有在编辑页面的时候,考虑不周到,在输入框输入要更改用户名后,controller接收不到值。编辑页面传到后端的url中的id,然后我们就可以根据这个id来获取用户并修改其值,setName();
收获:
实现了crud和restful风格的url,了解了http方法。
进度:
任务二步骤三
任务开始时间:3.23
预计demo时间:4.3
是否延期:否
禅道地址:http://task.ptteng.com/zentao/project-task-562.html
评论