我是Thymeleaf的新手,也许这是一个简单的问题。请帮帮我。谢谢。
控制器代码:
@Controller
public class TestController {
@GetMapping(value = "/")
public String testget(Map<String, Object> model) {
TestBean bean = new TestBean();
List<Person> list = new ArrayList<>();
for (int index = 1; index < 5; index++) {
Person p = new Person();
p.setId(index);
p.setName("name" + index);
list.add(p);
}
model.put("allList", "nothing");
bean.setList(list);
model.put("testbean", bean);
return "NewFile";
}
@PostMapping(value = "/")
public String testpost(Map<String, Object> model//
, @ModelAttribute(name = "testbean") TestBean bean) {
List<Person> list = bean.getList();
model.put("bean", bean);
model.put("allList", list.toString());
return "NewFile";
}}
简单映射器和Person bean:
@Data
public class TestBean {
private List<Person> list;
}
@Data
public class Person {
private int id;
private String name;
}
HTML code:
<form action="#" th:action="@{/}" th:object="${testbean}" method="post">
<p th:text="'ALL : ' + ${allList}"></p>
<table>
<tr th:each="person : ${testbean.list}">
<td>Id:<input type="text" th:value="${person.id}"
/></td>
<td>name: <input type="text" th:value="${person.name}" /></td>
</tr>
</table>
<input type="submit" value="submit" />
</form>
我希望将列表放到页面并更改要刷新的属性。 但我不知道如何添加 th:field 标记,我尝试添加
**th:field="*{testbean.list[__${index}__].id}"**
但它失败了:
Invalid property 'testbean' of bean class [com.TestBean]
UPDATE1
我试过
th:field="*{list[__${index}__].id}"
我收到错误我添加了 th:field
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.thymeleaf.spring4.processor.attr.SpringInputGeneralFieldAttrProcessor' (NewFile:14)] with root cause
java.lang.NumberFormatException: For input string: "null"
我的问题是我可以做些什么,我可以在控制器中获得列表。
答案 0 :(得分:0)
这是我在列出一些搜索结果的页面上的方式 - 带复选框的表格。代码本身仅被剥离到相关行。 AppliedTariff.to_stata('Applied%s.dta' % name, write_index = False)
是places.content
个对象的集合。
Place
和控制器方
<form th:action="@{selected-places}" method="POST" >
<tr th:each="place,i : ${places.content}">
<td><input name="places" th:value="${place.id}" type="checkbox"></td>
</tr>
</form>
正如您所看到的,尽管表单只发送了ID列表,但spring会自动对模型实体进行水合。您始终可以 @PostMapping(value = "/selected-places", params = "action=delete")
public String deletePlaces(@RequestParam Place[] places, RedirectAttributesModelMap model) {
....
}
收集整数,但它仍然有效。
答案 1 :(得分:0)
bean类[com.TestBean]的无效属性'testbean'
使用不th:field="*{list[__${index}__].id}
定义的testbean
模式。如果使用*
表示法,则它将引用父对象。
java.lang.NumberFormatException:对于输入字符串:“null”
将任何变量(如“rowStat”)添加到循环中以保存状态索引:
th:each="person,rowStat : ${testbean.list}"
并像th:field="*{list[__${rowStat.index}__].id}
一样访问它。因此索引不会为null,并且将字符串转换为int没有问题。