首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Thymeleaf ModelAttribute列表

Thymeleaf ModelAttribute列表
EN

Stack Overflow用户
提问于 2014-08-05 16:21:49
回答 2查看 4K关注 0票数 0

我试着用Thymeleaf作为ModelAttribute列表,但我没有让它起作用。我读过这个页面http://www.bincsoft.com/blog/thymeleaf-and-lists-in-forms/,但是我的代码失败了。

这是我的档案:

容器类

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;

import javax.validation.Valid;


public class WagerateForm {

    @Valid
    private List<WagerateUi> wagerateuilist;

    public WagerateForm() {
        wagerateuilist = new ArrayList<WagerateUi>();
    }

    public WagerateForm(List<WagerateUi> wagerateuilist) {
        this.wagerateuilist = wagerateuilist;
    }

    //getter , setter omitted
}

我的DTO用于ui

代码语言:javascript
复制
public class WagerateUi {

    //getter , setter omitted

    private boolean standard;
    private Long value;
}

控制器

代码语言:javascript
复制
@Named
@RequestMapping("/wagerate")
public class WagerateController {

@RequestMapping(value="")
public String wagerate(@ModelAttribute("wagerateform") WagerateForm wagerateForm,
        BindingResult bindingResult) {

    List<WagerateUi> wagerateUiList = wagerateForm.getWagerateuilist();

    System.out.println(wagerateUiList.size());

    //dummy items
    for (int i = 0; i < 10; i++) {
        WagerateUi temp = new WagerateUi();
        temp.setValue(100L);
        wagerateUiList.add(temp);
    }


    return "wagerate";
}

胸腺嘧啶html

代码语言:javascript
复制
<form id="wagerateform" class="form-horizontal" role="form" action="#" th:object="${wagerateform}" th:action="@{/wagerate}" method="post">              

    <div th:each="wagerateui, iterStat  : ${wagerateform.wagerateuilist}">      
        <input th:field="*{wagerateform[__${iterStat.index}__].value}" class="form-control">
    </div>
    <button type="submit">Test</button>

</form>

错误消息

代码语言:javascript
复制
Caused by: org.springframework.beans.NotReadablePropertyException: Invalid property 'wagerateform[0]' of bean class [WagerateForm]: Bean property 'wagerateform[0]' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
    at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:725)
    at org.springframework.beans.BeanWrapperImpl.getNestedBeanWrapper(BeanWrapperImpl.java:571)
    at org.springframework.beans.BeanWrapperImpl.getBeanWrapperForPropertyPath(BeanWrapperImpl.java:548)
    at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:714)
    at org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue(AbstractPropertyBindingResult.java:99)
    at org.springframework.validation.AbstractBindingResult.getFieldValue(AbstractBindingResult.java:229)
    at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:120)
    at org.thymeleaf.spring4.util.FieldUtils.getBindStatusFromParsedExpression(FieldUtils.java:348)
    at org.thymeleaf.spring4.util.FieldUtils.getBindStatus(FieldUtils.java:288)
    at org.thymeleaf.spring4.util.FieldUtils.getBindStatus(FieldUtils.java:260)

控制器中列表的大小始终为0。我看不出有什么不对,我尝试了不同的方法,但我认为我的Thymeleaf/Spring EL是错的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-07 16:05:05

我到目前为止还在用:

代码语言:javascript
复制
<input th:value="${wagerateform.wagerateuilist[__${iterStat.index}__].value}" class="form-control">
票数 4
EN

Stack Overflow用户

发布于 2014-08-06 07:23:03

您的wagerateform不是列表,列表是wagerateuilist。使用th:each,在循环遍历列表时,可以使用元素填充wagerateui对象。

代码语言:javascript
复制
<div th:each="wagerateui : ${wagerateform.wagerateuilist}">      
        <input th:field="${wagerateui.value}" class="form-control">
</div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25143756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档