我正在尝试从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看起来像这样
<!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;
这可能是重复的,但似乎我遇到的大多数解决方案都没有帮助。所以任何帮助都是最受欢迎的。提前谢谢。
答案 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
,但该表格与您的表单不符。