当前位置: 首页 > 知识库问答 >
问题:

无法解析Spring-thymeleaf表单url

邹宣
2023-03-14

我想知道如何在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表单模板中传递参数。

共有1个答案

琴镜
2023-03-14

在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是新手,不明白这个错误。