IntelliJ中的Spring Boot + thymeleaf:无法解析vars [英] Spring boot + thymeleaf in IntelliJ: cannot resolve vars

查看:193
本文介绍了IntelliJ中的Spring Boot + thymeleaf:无法解析vars的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在IntelliJ上使用spring boot和thymeleaf编写一个简短的Web窗体应用程序,但是似乎在html文件中,无法解析模型中的所有字段.这是我的代码:

I'm writing a short web form application using spring boot and thymeleaf on IntelliJ, but it seems that in the html file, all fields in the model cannot be resolved. Here is my code:

控制器类:

@Controller
public class IndexController{

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index(){
        return "index";
    }

    @RequestMapping(value="/", method = RequestMethod.POST)
    public String addNewPost(@Valid Post post, BindingResult bindingResult, Model model){
        if(bindingResult.hasErrors()){
            return "index";
        }
        model.addAttribute("title",post.getTitle());
        model.addAttribute("content",post.getContent());
        return "hello";
    }
}

模型类:

public class Post {

    @Size(min=4, max=35)
    private String title;

    @Size(min=30, max=1000)
    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) {
        this.content = content;
    }
}

然后是index.html:

Then is the index.html:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head lang="en">

    <title>Spring Framework Leo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>

<h3>Spring Boot and Thymeleaf</h3>


    <form action="#" th:action="@{/}"  th:object="${post}" method="post">
        <table>
            <tr>
                <td>Title:</td>
                <td><input type="text" th:field="*{title}" /></td>
                <td th:if="${#fields.hasErrors('title')}" th:errors="*{title}">Title error message</td>
            </tr>
            <tr>
                <td>Content:</td>
                <td><input type="text" th:field="*{content}" /></td>
                <td th:if="${#fields.hasErrors('content')}" th:errors="*{content}">Content error message</td>
            </tr>
            <tr>
                <td><button type="submit">Submit post</button></td>
            </tr>
        </table>
    </form>

在帖子",标题"和内容"下总是有红线,但我不知道如何解决.是IntelliJ的问题还是我的代码的问题?

There are always red lines under "post", "title" and "content", but I don't know how to solve it. Is it a problem of IntelliJ or just a problem of my code?

推荐答案

  1. 如果您的IntelliJ版本是< 2017.3 ,它是 Andrew写的,是已知错误
  1. If your IntelliJ version is < 2017.3, it is, as Andrew wrote, a known error IDEA-132738. There is a workaround how to get rid of the error marks in the IDE. IntelliJ also supports the semi-automatic generation of the below mentioned code:

您可以使用 Alt + Enter 快捷方式来调用意图在注释注释中声明外部变量".为了摆脱未解决的模型属性",在您看来.

You can use Alt+Enter shortcut to invoke intention "Declare external variable in comment annotation" in order to get rid of "unresolved model attribute" in your views.

将以下代码添加到您的html文件中:

Add the following code to your html file:

<!--/* Workaround for bug https://youtrack.jetbrains.com/issue/IDEA-132738 -->
    <!--@thymesVar id="post" type="your.package.Post"-->
    <!--@thymesVar id="title" type="String"-->
    <!--@thymesVar id="content" type="String"-->
<!--*/-->

如果您使用ThymeLeaf自动构造的扩展对象(例如thymeleaf-extras-java8time中的#temporals)来转换java.time对象,则:

If you use extensions objects constructed automatically by ThymeLeaf, such as #temporals from thymeleaf-extras-java8time for conversion of java.time objects:

<span th:text="${#temporals.format(person.birthDate,'yyyy-MM-dd')}"></span>

并且IntelliJ无法解析它们,使用类似的代码,仅在对象名称前面添加#:

and IntelliJ cannot resolve them, use similar code, and just add # in front of the object name:

<!--@thymesVar id="#temporals" type="org.thymeleaf.extras.java8time.expression.Temporals"-->

  1. 如果您的IntelliJ版本是> = 2017.3 (但是有些人抱怨说它仍然不适用于他们),则问题
  1. If your IntelliJ version is >= 2017.3 (however some people complain that it still does not work for them), the issue IDEA-132738 should be fixed (@FloatOverflow: "I confirm that in version 2017.3 build 25.Oct.2017 the problem has been solved"):

状态2017.3

Status 2017.3

对Spring Boot自动配置的MVC应用程序的支持已完成,支持所有捆绑的自动配置视图类型.

Support for Spring Boot autoconfigured MVC applications is complete, all bundled autoconfiguration view types are supported.

修复版本:2017.3

Fix versions: 2017.3

这篇关于IntelliJ中的Spring Boot + thymeleaf:无法解析vars的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆