【问题标题】:Form button do nothing表单按钮什么都不做
【发布时间】:2018-02-28 08:04:06
【问题描述】:

我得到了这个 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

【问题讨论】:

    标签: java html spring spring-mvc thymeleaf


    【解决方案1】:

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

    &lt;form action="#" th:action="@{/redirectToAddProd}" method="post"&gt;

    并且您的控制器需要被注释以处理发布请求,但是您认为合适:

    @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" />

    【讨论】:

    • 你好@bphilipnyc 对不起,但我不知道在哪里使用注释GetMapping。我进行了您要求我进行的所有其他更改,但现在我收到此错误消息:不支持请求方法“POST”顺便说一句谢谢您的回答
    • 九月。 2017 年 2 月 20 日上午 9:48:06 org.springframework.web.servlet.PageNotFound handleHttpRequestMethodNotSupported 声明:不支持请求方法“POST”
    • 哦,我理解你所说的GetMapping。感谢您的提示。
    • 检查在您的表单中调用的任何方法是否支持带注释的@PostMapping 方法。在方法的第一行添加一个日志语句,以查看它是否被调用。
    • 另外,当有人提供答案时,最好不要更改原始问题 - 您的第一个问题是使用 POST 与 GET
    猜你喜欢
    • 2016-07-24
    • 2020-04-22
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多