发表于: 2018-04-02 22:51:56

1 715


今天完成的事情:

实现了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



返回列表 返回列表
评论

    分享到