列出springboot和thymeleaf

时间:2018-04-30 20:06:24

标签: java arrays maven spring-boot thymeleaf

我正在尝试从html表单中获取作为列表参数发送到服务器的对象列表,然后我将遍历这些条目,然后通过springboot th:each返回它们。但它似乎并没有起作用。在加载时,表单会出现,但是当我在其中输入一个值时,它会返回一个错误页面,然后URL会变为:

http://localhost:8080/@%7B/%7D?%24%7Bcontent%7D=hello

eclipse中的这个输出说:

Expression "content" is not valid: only variable expressions ${...} or selection expressions *{...} are allowed in Spring field bindings 

注意:此处的内容是我表单中的value属性。 我的控制器看起来像这样:

@Controller
public HelloList() {
    this.addUs = new ArrayList <>();
}

@RequestMapping("/")
public String getlist(@RequestParam (required = false) String content, Model model) {
    if (content != null && !content.trim().isEmpty()) {
        this.addUs.add(content);
    }

    model.addAttribute("list",addUs);
    return "index";
}

index.html看起来像这样

&#13;
&#13;
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Insert title here</title>
</head>
<body>
<div>
    <ul>
        <li th:each="amHere: ${addUs}">
            <span th:text="${amHere}">hello! world</span>
        </li>
    </ul>

    <form action="@{/}" method="GET">
        <input type="text" name="content"/>
        <input type="submit" value="Submit"/>
    </form>
</div>
</body>
</html>
&#13;
&#13;
&#13;

这可能是重复的,但似乎我遇到的大多数解决方案都没有帮助。所以任何帮助都是最受欢迎的。提前谢谢。

2 个答案:

答案 0 :(得分:1)

原来我错过了构造函数中列表的初始化。我首先在构造函数中添加一个值来初始化列表,如下所示。

this.addUs.add("Hello World");

因为@RequestMapping映射到我的案例index.html中的主路径,所以任何请求都会自动发送到那里。 working example

答案 1 :(得分:0)

action = "@{/}"应为th:action="@{/}"。这就是您查看奇怪网址的原因(因为它的网址编码为@{/})。 Thymeleaf仅评估以th:开头的表达式。

我不确定其他错误。看起来您粘贴的HTML与您收到的错误不符。

如果您对http://localhost:8080/@%7B/%7D?%24%7Bcontent%7D=hello进行了网址编码,则会获得http://localhost:8080/@{/}?${content}=hello,但该表格与您的表单不符。