我想知道如何在spring表单mvc平台中传输参数。首先,下面的代码是spring格式的java文件。
public class PostForm {
@NotNull
@Size(max=30, message="type id within 30 limits")
private String title;
@NotNull
@Size(max=100, message="type id within 100 limits")
private String Content;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
}
下一个文件是有界编辑。html文件
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<meta charset="UTF-8">
<title>Blog modification</title>
</head>
<body>
<h1>Please, Modifiy.</h1>
<form method="post" th:object="${postForm}">
<div><label for="title">title</label></div>
<input id="title" type="text" name="title" th:value="*{title}" />
<span class="formError" th:if="${#fields.hasErrors('title')}" th:errors="*{title}">Input title is wrong</span>
<div><label for="content" th:value="*{title}">Content</label></div>
<textarea name="content" rows="20" width="200" th:value="*{content}"></textarea>
<span class="formError" th:if="${#fields.hasErrors('content')}" th:errors="*{content}">Input content is wrong</span>
<div>
<input type="submit" value="Modify" />
<a href="index.html" th:href="@{/posts}">Cancel</a>
</div>
</form>
</body>
</html>
表单的输入链接url如下所示,
<td>
<a href="posts/edit.html" th:href="@{posts/edit/__${post.id}__}">edit</a><br/>
<a href="posts/edit.html" th:href="@{posts/edit/__${post.id}__}">delete</a>
</td>
但是spring mvc控制器代码中抛出了异常。
@RequestMapping("/posts/edit/{id}")
public String edit(PostForm postForm) {
return "posts/edit/{id}"; //This line throws exception.
}
@RequestMapping(value="/posts/edit/{id}", method = RequestMethod.POST)
public String edit(@PathVariable("id") Long id, @Valid PostForm postForm, BindingResult bindingResult) {
Post p = postService.findById(id);
postForm.setTitle(p.getTitle());
postForm.setContent(p.getBody());
.....
例外的是
ERROR 4024 --- [nio-8080-exec-4] org.thymeleaf.TemplateEngine : [THYMELEAF][http-nio-8080-exec-4] Exception processing template "posts/edit/{id}": Error resolving template "posts/edit/{id}", template might not exist or might not be accessible by any of the configured Template Resolvers
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "posts/edit/{id}", template might not exist or might not be accessible by any of the configured Template Resolvers
at org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:870) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:607) ~[thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098) [thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072) [thymeleaf-3.0.9.RELEASE.jar:3.0.9.RELEASE]
我不知道如何在Spring-Thymeleaf表单模板中传递参数。
在Sprig MVC中,当使用GET方法调用@ReqeustMap注释时,它会尝试查找返回值中定义名称的html模板。
@RequestMapping("/posts/edit/{id}")
public String edit(PostForm postForm) {
return "posts/edit/{id}"; //This line throws exception.
}
因此,您必须在这里返回resources文件夹中html模板的名称(而不是url)
所以我想应该是
@RequestMapping("/posts/edit/{id}")
public String edit(PostForm postForm) {
return "views/mytemplate";
}
这个错误显然表明它在resources文件夹下找不到模板。您的代码所做的是尝试在名为{id}的资源文件夹下的“posts”文件夹下的“edit”文件夹中定位thymeleaf模板,但它不在那里,因此会抛出错误。
我的建议是如前所述更改GET方法的返回值。
如果需要将任何参数传递给视图,请使用模型类。如果必须从{id}计算参数的值,那么可以使用@PathVariable将id映射到参数。
@RequestMapping("/posts/edit/{id}")
public String edit(@PathVariable(value="id") String id, Model model) {
// do something here to get values using the id
....
model.addAttribute("parameter1", parameter1);
return "views/mytemplate";
}
顺便说一句,您在GET方法中不需要PostForm参数,因为它在调用时不会在正文中传递任何postForm参数。您可以将其留空。
希望这对你有所帮助,祝你编码愉快!:)
我的问题是我未能显示胸腺叶模板。我怀疑配置错误,但我似乎找不到它。提前感谢:) 波姆。xml: 模板在: Spring配置: 控制器: 我正在尝试访问:并获得404。 另一件事,有人能解释(或给文档一个链接)哪个servlet被用来“返回”模板html吗?是Spring调度员servlet吗? 好的,所以我忘记了,谢谢@Benjamin c.然而,添加它会产生:
我使用的是spring boot thymeleaf neo4j。除了thymeleaf无法解析模板product_网格中th:each块中使用的'product'变量的一些属性外,其他一切都正常工作。html,其中包括表单标记中的th:src=“${product.URL}”、th:text=“${product.title}”和th:action=“@{/product/(${product.
我不熟悉Spring5和SpringBoot。我试图用thymeleaf创建一个Spring5/spring启动应用程序。我想创建一个war,而不是使用带有spring boot的嵌入式Web服务器。 当我部署war时,我的应用程序启动,我可以访问src/main/resources/static/中的测试html页面,其中包含调用我的控制器的javascript。我可以在这些页面上执行到控制器和
问题内容: 尝试在模板中合并多个值时遇到问题。根据Thymeleaf的说法,我应该可以将它们+一起组合在一起… 4.6合并文本 文本,无论它们是文字还是评估变量或消息表达式的结果,都可以使用+运算符轻松连接: 这是我发现有效的示例: 但是,这不是: 从逻辑上讲,这应该可以,但是不能,我在做什么错? Maven: 这是我设置TemplateEngine和TemplateResolver的方法: Th
“帖子”、“标题”、“内容”下面总有红线,却不知如何解决。是IntelliJ的问题,还是仅仅是我的代码的问题?
我对thymeleaf是新手,不明白这个错误。