如何将列表发布到Thymeleaf的控制器

时间:2018-03-24 08:36:23

标签: spring-boot thymeleaf

我是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"

我的问题是我可以做些什么,我可以在控制器中获得列表

2 个答案:

答案 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没有问题。