【问题标题】:Thymeleaf ModelAttribute ListThymeleaf 模型属性列表
【发布时间】:2014-08-05 16:21:49
【问题描述】:

我尝试使用 Thymeleaf 将 List 之类的东西作为 ModelAttribute,但我没有让它工作。我阅读了此页面http://www.bincsoft.com/blog/thymeleaf-and-lists-in-forms/,但我的代码失败了。

这是我的文件:

容器类

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

public class WagerateUi {

    //getter , setter omitted

    private boolean standard;
    private Long value;
}

控制器

@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

<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>

错误信息

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 是错误的。

【问题讨论】:

    标签: spring spring-mvc thymeleaf


    【解决方案1】:

    到目前为止,我得到了它的工作:

    <input th:value="${wagerateform.wagerateuilist[__${iterStat.index}__].value}" class="form-control">
    

    【讨论】:

      【解决方案2】:

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

      <div th:each="wagerateui : ${wagerateform.wagerateuilist}">      
              <input th:field="${wagerateui.value}" class="form-control">
      </div>
      

      【讨论】:

      • 是的,你是对的,它不是一个列表,你的代码在我的情况下不起作用我得到一个 bindingresult 错误。它现在使用 : 。谢谢
      • 我删除了wagerateui, : ${wagerateform.wagerateuilist} 中的逗号,我想现在应该可以了。
      猜你喜欢
      • 2020-06-27
      • 2016-07-12
      • 1970-01-01
      • 2018-12-16
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      相关资源
      最近更新 更多