将ID传递给控制器​​

时间:2017-11-06 20:21:36

标签: spring hibernate thymeleaf

首先,我将数据库中的值传递给表。在第一列中,我想创建一个表单,该表单将在Controller中传递id to delete功能。

<tr th:each="blg: ${all}" th:object="${blg}" >
    <td>
    <form th:action="@{/delete}" th:object= "${blg}" method="post">
    <input type="text" th:field="${blg.id}"/>
    <button type="submit">Delete</button>
    </form>
    </td>
    <td th:text="*{title}"> title </td>     
    <td th:text="*{content}"> title </td>
    <td th:text="*{category}"> title </td>
    <td th:text="*{signature}"> title </td> 
</tr>

控制器:

@GetMapping("/show")
public String show(Model model){
    List<Blog> all = br.findAll();
    model.addAttribute("all",all);
    return "show";
}

@RequestMapping(value="/delete", method=RequestMethod.POST)
    public String deletePost(@RequestParam Long id){        
        br.delete(id);        
        return "redirect:/show";
    }

当发生此错误时,百万美元引擎不会映射对象:

java.lang.IllegalStateException:BindingResult和bean名称'blg'的普通目标对象都不能作为请求属性。

在这种情况下,创建正确表单的方法是什么?

1 个答案:

答案 0 :(得分:0)

更新您的html代码,如下所示:

<tr th:each="blg: ${all}" >
    <td>
        <form th:action="@{|/delete/${blg.id}|}" method="post">
            <button type="submit">Delete</button>
        </form>
    </td>
    <td th:text="${blg.title}"> title </td>     
    <td th:text="${blg.content}"> title </td>
    <td th:text="${blg.category}"> title </td>
    <td th:text="${blg.signature}"> title </td> 
</tr>

最好将HTTP方法DELETE用于删除操作。

原因是th:object试图查看属性blg的请求属性。但是blg是迭代的结果。