2014-03-12 25 views
0

我用表單聲明控制器。但是,當我使用刪除網址,趕上404錯誤@RequestMapping不能抓到url

我有一個表代碼:

<c:forEach items="${model.books}" var="book"> 
     <tr align="left" height="100%"> 
      <td>${book.name}</td> 
      <td>${book.description}</td> 
      <td>${book.year}</td> 
      <td></td> 
       <%--<td>${book.authorNames}</td>--%> 
      <sec:authorize access="hasRole('ROLE_ADMIN')"> 
       <td> 
        <a href="${pageContext.request.contextPath}/BookList.vw/${book.id}">Delete</a> 
        <a href="${pageContext.request.contextPath}/EditBook.vw/${book.id}">Edit</a> 
       </td> 
      </sec:authorize> 
     </tr> 
    </c:forEach> 

而且我的控制器:

@Controller 
@RequestMapping("/BookList.vw") 
public class BookListController { 

    @Autowired 
    private IBookService bookService; 

    public String getModelName() { 
     return "BookList"; 
    } 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    protected ModelAndView openMain() throws Exception { 
     Map<String, Object> model = new HashMap<String, Object>(); 
     List<Book> books = bookService.listBooks(); 
     model.put("books", books); 

     return new ModelAndView(getModelName(), "model", model); 
    } 

    @RequestMapping(value = {"/delete"}, method = RequestMethod.POST) 
    public ModelAndView delete(@RequestParam("id") Integer id) throws Exception { 
     bookService.removeBook(id); 
     return new ModelAndView(getModelName()); 
    } 
} 

通過第二URL我趕上404錯誤太多。我不明白爲什麼。 EditBook控制器:

@Controller 
@RequestMapping("/EditBook.vw") 
public class EditBookController{ 

    @Autowired 
    private IBookService bookService; 

    @Autowired 
    private IAuthorService authorService; 


    @RequestMapping(value = "/{id}", method = RequestMethod.GET) 
    protected ModelAndView openMain(@PathVariable Integer id) throws Exception { 
     Map<String, Object> model = new HashMap<String, Object>(); 
     List<Book> books = bookService.listBooks(); 
     Book book = new Book(); 
     for (Book book1 : books) { 
      if(book1.getId() == id) 
       book = book1; 
     } 

     model.put("book", book); 

     return new ModelAndView("EditBook", "model", model); 
    } 
} 

我試圖改變它的POST,GET等之間的..幫助我嗎?請

回答

0

你的控制器聲明只有post請求會執行delete()方法。因爲href是不是一個職位,您應該使用的

<form method="post" action="the_delete_URL"> 

代替 。

+0

Acemerk也是對的@PathVariable也 – CodeBender

+0

Acemerk是不正確的。我已經試過了。它沒有幫助 –

+0

你需要使用form post而不是href,再次嘗試acemerk的方法但是使用method = RequestMethod.POST?在你粘貼的堆棧跟蹤中清楚地聲明瞭它的@PathVariable not found錯誤。 – CodeBender

1
@RequestMapping(value = "/delete/{id}", method = RequestMethod.GET) 
    public ModelAndView delete(@PathVariable Integer id) throws Exception { 
     bookService.removeBook(id); 
     return new ModelAndView(getModelName()); 
    } 

你可以試試嗎?

+0

我已經試過這個,但沒有幫助。異常之前: –

+0

你可以請這個[線程](http://forum.spring.io/forum/spring-projects/web/76651-problem-with-requestmapping-and-path-variable),如果沒有找到解決方案,分享你的servletcontex.xml – acemrek