我有一个带有Thymeleaf的Spring-boot Java应用程序。当根网页访问过时,将从此控制器显示带有表单的页面。
@Controller
@Scope("session")
public class AController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String queryForm(Model model) {
model.addAttribute("query", new Query());
System.out.println("added query to model");
return "question_page";
}
@RequestMapping(value = "/", method = RequestMethod.POST)
public String querySubmit(@ModelAttribute Query query) {
System.out.println("button pressed");
return "result";
}
}
该表格如下所示。填写表格并点击提交时。我希望先前创建的查询从具有设置内容的请求映射程序的模型传递。但这似乎是一个不同的查询,因为它具有不同的内存地址。
<div clas="queryFrom">
<form action="#" th:action="@{/}" th:object="${query}" method="post"
class="embed-submit-field">
<input type="text" th:field="*{content}" id="query" list="suggestions" autocomplete="off"
class="inputField"/>
<button type="submit" value="Submit" id="submitButton" class="btn">
<i class="material-icons">search</i>
</button>
</form>
</div>
在结果页面上是一个按钮,该按钮触发控制器的以下请求映射器。我希望控制器将获得与内容集相同的查询,但是会得到另一个与内容集不相同的查询。
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String trigger_reload(@ModelAttribute Query query) {
System.out.println(query.getContent()); // content is null
return "result";
}
我不确定自己在做什么错。欢迎任何建议。
该问题被标记为possible duplicate of another question。我只是想确保这些问题完全不同。从Thymeleaf正确设置了Content字段。问题是我没有从模型中获取设置了字段的Query类的实例。完全不同的问题!
答案 0 :(得分:0)
我自己弄清楚了。我只需要将model属性添加到会话中,否则它将丢失。我刚刚在班级顶部添加了@SessionAttributes({ "query" })
,就解决了我的问题。
答案 1 :(得分:-1)
您可以采用这种方法。
不要使用th:field,而是使用html id和name。使用th:value
设置值<input class="form-control"
type="text"
th:value="${content}" id="content" name="content" />