我在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:
这很奇怪,因为我正在尝试重定向到我称为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重定向页面的情况下完成?
似乎我在堆栈溢出时遇到了我的问题,因为它们一直被投票,但要么有错误的答案,要么根本没有。任何有关这方面的帮助将不胜感激。
答案 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>