Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms @请求映射可以';无法捕获url_Forms_Spring Mvc_Servlets_Controller - Fatal编程技术网

Forms @请求映射可以';无法捕获url

Forms @请求映射可以';无法捕获url,forms,spring-mvc,servlets,controller,Forms,Spring Mvc,Servlets,Controller,我用一个表单声明控制器。但当我使用删除url时,捕获404错误 我有一个带有代码的表: <c:forEach items="${model.books}" var="book"> <tr align="left" height="100%"> <td>${book.name}</td> <td>${book.description}</td>

我用一个表单声明控制器。但当我使用删除url时,捕获404错误

我有一个带有代码的表:

<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>

${book.name}
${book.description}
${book.year}
和我的控制器:

@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());
    }
}
@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);
    }
}
@控制器
@请求映射(“/BookList.vw”)
公共类BookListController{
@自动连线
私人IBookService图书服务;
公共字符串getModelName(){
返回“书单”;
}
@RequestMapping(value=“/”,method=RequestMethod.GET)
受保护的ModelAndView openMain()引发异常{
映射模型=新的HashMap();
List books=bookService.listBooks();
模型。放置(“书籍”,书籍);
返回新的ModelAndView(getModelName(),“model”,model);
}
@RequestMapping(值={“/delete”},方法=RequestMethod.POST)
公共ModelAndView删除(@RequestParam(“id”)整数id)引发异常{
bookService.removeBook(id);
返回新的ModelAndView(getModelName());
}
}
通过第二个URL,我也发现了404错误。我不明白为什么。 编辑本控制器:

@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());
    }
}
@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);
    }
}
@控制器
@请求映射(“/EditBook.vw”)
公共类EditBookController{
@自动连线
私人IBookService图书服务;
@自动连线
私有IAuthorService authorService;
@RequestMapping(value=“/{id}”,method=RequestMethod.GET)
受保护的ModelAndView openMain(@PathVariable Integer id)引发异常{
映射模型=新的HashMap();
List books=bookService.listBooks();
书=新书();
用于(第1册:书籍){
if(book1.getId()==id)
book=book1;
}
模型放置(“书”,书);
返回新模型和视图(“编辑本”、“模型”、“模型”);
}
}

我试着在POST、Get和其他之间更改它。。帮助我?请

您的控制器声明只有post请求将执行delete()方法。你应该使用

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

而不是 因为这不是帖子

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

你能试试这个吗?

你能检查一下这个[thread]()吗?如果找不到解决方案,请分享你的servletcontex.xmlU需要使用form post而不是href,请再次尝试acemerk的方法,但使用method=RequestMethod.post?在粘贴的堆栈跟踪中,明确说明其@PathVariable not found错误。