Spring Mvc Controller - 删除问题

时间:2011-02-27 13:52:45

标签: hibernate spring-mvc controller dao

我在j2ee项目中工作(pojo层,Dao层(休眠),服务层(spring),View(spring mvc)) 我想在每行后面添加一个链接来删除它。

这是我的观点

<c:if test="${!empty articles}">
<table>
    <tr>
        <th>Article ID</th>
        <th>Article Name</th>
        <th>Article Desc</th>
        <th>Added Date</th>
        <th>operation</th>
    </tr>

    <c:forEach items="${articles}" var="article">
        <tr>
            <td><c:out value="${article.articleId}"/></td>
            <td><c:out value="${article.articleName}"/></td>
            <td><c:out value="${article.articleDesc}"/></td>
            <td><c:out value="${article.addedDate}"/></td>
            <td><a href="articles/${article.articleId}">delete</a></td>
        </tr>
    </c:forEach>
</table>

这是要删除的控制器

@RequestMapping(value="/articles/{articleId}", method=RequestMethod.POST)
public String deleteContact(@PathVariable("articleId")
Integer articleId) {

    articleService.removeArticle(articleId);

    return "redirect:/articles.html";
}

这是服务层

    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public void removeArticle(Integer id) {
    articleDao.removeArticle(id);
}

这是Dao图层(我试图找到文章然后将其删除)

    public void removeArticle(Integer id) {
            //to get the article
    Article article = (Article) sessionFactory.getCurrentSession().load(
            Article.class, id);
    if (null != article) {
        sessionFactory.getCurrentSession().delete(article);
    }

}

但是当我运行项目并单击删除链接时,我有404错误 Etat HTTP 404 - / Spring3Hibernate / articles / 1 description请求的资源(/ Spring3Hibernate / articles / 1)不可用

有人能帮助我吗?

2 个答案:

答案 0 :(得分:5)

 <td><a href="articles/${article.articleId}">delete</a></td>

这是标准的GET请求,但您的控制器已映射到POST。

@RequestMapping(value="/articles/{articleId}", method=RequestMethod.POST)

此外,它看起来非常大的安全问题。我可以编写非常简单的10行程序,它将使用get / post请求从/ articles / 1调用/ articles / {any number}并删除整个数据。我建议在设计此类应用程序时将其考虑在内。

答案 1 :(得分:0)

尝试将请求方法设为DELETE。不建议使用GET方法来改变server / db中的值。如果你想坚持使用post使其成为表单提交而不是href

RequestMapping(value="/articles/{articleId}", method=RequestMethod.DELETE)