Весенняя форма листа тимелина не может быть решена - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу знать, как передать параметры в пружинной форме платформы MVC.Во-первых, ниже приведен код 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;
    }
}

А следующий файл - ограниченный файл edit.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>

Но исключение выдается в кодах контроллера 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 Ответ

0 голосов
/ 26 сентября 2018

В Sprig MVC, когда вызывается аннотация @ReqeustMapping с методом GET, он пытается найти шаблон html с именем, определенным в возвращаемом значении.

@RequestMapping("/posts/edit/{id}")
public String edit(PostForm postForm) {
    return "posts/edit/{id}"; //This line throws exception.
}

Итак, здесь вы должны вернуть имя html-шаблона в папке ресурсов (не URL)

Так что я предполагаю, что оно должно быть

@RequestMapping("/posts/edit/{id}")
public String edit(PostForm postForm) {
    return "views/mytemplate";
}

Ошибка явно указывает на то, что он не может найти шаблон в папке ресурсов.Ваш код пытается найти шаблон тимилиста в папке «edit» в папке «posts» под папкой resources с именем «{id}», но его там нет, поэтому он выдает ошибку.

Я предлагаю изменить возвращаемое значение метода GET, как я упоминал выше.

Если вам нужно передать какие-либо параметры в представление, используйте класс Model.Если значение параметров должно быть вычислено из {id}, то вы можете использовать @PathVariable, чтобы сопоставить идентификатор с параметром.

@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";
}

Кстати, вам не нужен параметр PostForm в методе GET, поскольку он не передает никакие параметры postForm в теле при его вызове.Вы можете оставить это поле пустым.

Надеюсь, это поможет, получайте удовольствие от кодирования!:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...