表单按钮什么都不做

时间:2017-09-19 13:41:25

标签: java html spring spring-mvc thymeleaf

我得到了这个index.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="ISO-8859-1">
    <title>Store</title>
</head>
<body>
    <form action="#" th:action="@{/redirectToAddProd}" method="post">
        <input type="submit" value="Submit" />
    </form>
</body>
</html>

我得到了这个StoreController.java

@Controller
@RequestMapping("/")
public class StoreController {
    @GetMapping("/")
    public String index() {
        return "index";
    }

    @GetMapping("/addProduct")
    public String addProduct() {
        return "addProduct";
    }

    @PostMapping("/redirectToAddProd")
    public String redirectToAddProd() {
        return "redirect:/addProduct";
    }
}

我的问题是,当我按下提交按钮时,没有任何事情发生(实际上什么都没有),甚至不是404的获取请求。你有解决方案吗? 谢谢

编辑: 我的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>MyStore</display-name>

    <servlet>
        <servlet-name>store</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/store-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>store</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
编辑:现在我收到了一个新错误。现在按钮做了一些事情,但却给了我错误:

sept. 20, 2017 10:08:30 AM org.springframework.web.servlet.PageNotFound handleHttpRequestMethodNotSupported
AVERTISSEMENT: Request method 'POST' not supported

1 个答案:

答案 0 :(得分:1)

Your form should have a method of POST, not GET.

<form action="#" th:action="@{/redirectToAddProd}" method="post">

您的控制器需要注释才能处理发布请求,但您认为合适:

@PostMapping("/redirectToAddProd")
public String redirectToAddProd() {
    return "redirect:/addProduct";
}

最后,您可以从控制器顶部删除@RequestMapping("/"),因为它是多余的,并使用@GetMapping而不是代码中的较长格式。

您可以在这些类上启用调试日志记录,以帮助您诊断路由问题:

<logger name="org.springframework.web.servlet.handler.AbstractUrlHandlerMapping" level="DEBUG" /> <logger name="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" level="DEBUG" />