Thymleaf表单提交结果为404?

时间:2017-08-13 19:24:51

标签: java thymeleaf

我在Thymeleaf写了一个表格,用来从用户那里获取数据。它看起来像这样:

 	<h1>Form</h1>
    <form action="#" th:action="@{/addArticle}" th:object="${article}" method="post">
    	<p>Id: <input type="text" th:field="*{id}" /></p>
        <p>Message: <input type="text" th:field="*{title}" /></p>
        <p>Message: <input type="text" th:field="*{authors}" /></p>
        <p>Message: <input type="text" th:field="*{genre}" /></p>
        <p>Message: <input type="text" th:field="*{content}" /></p>
        <p>Message: <input type="text" th:field="*{date}" /></p>
        <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
    </form>

问题是,每当我提交此表单时,它都不会保存到mongo数据库,甚至不会显示结果页面。相反,它会抛出404.我注意到这个错误来自url:

  

http://localhost:8080/addArticle

这很奇怪,因为我正在尝试重定向到我称为return.html的页面(它存在于正确的目录中,我测试过html是有效的)。这是我的控制者:

>@Controller
@RequestMapping("/articles")
public class ArticleController {

    private ArticleRepo articleRepo;

    @Autowired
    public ArticleController(ArticleRepo articleRepo) {
        this.articleRepo = articleRepo;
    }

    @RequestMapping(value = "/findAll", method = RequestMethod.GET)
    @ResponseBody
    public List<Article> findall() {
        return articleRepo.findAll();
    }

    @GetMapping("/addArticle")
    public String getAddArticle(Model model) {
        model.addAttribute("article", new Article());
        return "submitAnArticle";
    }

    @PostMapping("/addArticle")
    public String submitAddArticle(@ModelAttribute Article newArticle) {
        articleRepo.save(newArticle);
        return "result";
    }


}

我已经尝试过浏览堆栈溢出并使用this Spring文档作为参考,但我被卡住了。我对此有几个问题:

最重要的问题 1.任何人都可以使用此表单或可能识别此错误吗?

奖金问题 2.在切换到Thymeleaf奇怪的形式之前,我已经成功地使用了Javascript。反正我是否可以从这里获取数据并将其放入javascript中,就像我以前一样?我尝试使用标准的html表单,但它没有做任何事情。 3.有没有办法可以在不通过AJAX重定向页面的情况下完成?

似乎我在堆栈溢出时遇到了我的问题,因为它们一直被投票,但要么有错误的答案,要么根本没有。任何有关这方面的帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

根据您的代码示例确定会抛出404错误。在您的控制器中,您将在

中映射两次
@RequestMapping("/articles")
public class ArticleController

@PostMapping("/addArticle")
public String submitAddArticle(@ModelAttribute Article newArticle) {

所以你的网址将是

http://localhost:8080/articles/addArticle

但您正试图发布

http://localhost:8080/addArticle

答案 1 :(得分:2)

查看地图,不是您的网址http://localhost:8080/articles/addArticle?,请尝试删除&#34; /&#34;从行动:

th:action="@{addArticle}"

否则这可能导致网址从根目录中获取,即:

http://localhost:8080/addArticle

编辑:此外,您声明:

  

因为我试图重定向到我称之为return.html的页面

但是在您的控制器中,您将返回result,尝试将其更改为:

@PostMapping("/addArticle")
public String submitAddArticle(@ModelAttribute Article newArticle) {
    articleRepo.save(newArticle);
    return "return";
}

答案 2 :(得分:0)

我认为您可能无法导入必要的jar,将它们放在pom.xml中或自行下载

    <dependency>
        <groupId>nz.net.ultraq.thymeleaf</groupId>
        <artifactId>thymeleaf-layout-dialect</artifactId>
    </dependency>

    <dependency>
        <groupId>net.sourceforge.nekohtml</groupId>
        <artifactId>nekohtml</artifactId>
    </dependency>