不支持索引到类型'com.ItemBean'

时间:2017-04-12 17:47:13

标签: spring-mvc thymeleaf

我有一个这样的包装类:

@NoArgsConstructor 
@Data 
public class ListWrapper {

    public ListWrapper(List<Object> objects) {

        this.objects = objects;
    }

    private List<Object> objects;

}

我希望用自定义bean填充包装器。我们称之为ItemBean。

那么我有:

@GetMapping("/rentSetup")
public String setupRent(@RequestParam("companyId") Integer companyId,
                        Model model) {

    List<Object> beans = new ArrayList<>();
    ItemBean bean = new Builder()
                .someProperty(something)
                .build();
    beans.add(bean);

    ListWrapper wrapper = new ListWrapper(beans);
    model.addAttribute("itemBeansWrapper", wrapper);
    return "setup";
}

我想让用户在视图中编辑属性someProperty。我想我会这样做:

<form th:object="${itemBeansWrapper}"
      th:action="@{/setup(companyId=${companyId})}"
      th:method="post">

    <div th:each="bean, iterStat : ${itemBeansWrapper.objects}">
      <input type="number"
             th:name="${bean[__${iterStat.index}__].someProperty}">
    </div>

    <button type="submit"
            th:name="action"
            th:value="review" value="review"> Review
    </button>
</form>

但结果是:

org.springframework.expression.spel.SpelEvaluationException: EL1027E:(pos 4): Indexing into type 'com.ItemBean' is not supported
    at org.springframework.expression.spel.ast.Indexer.getValueRef(Indexer.java:176)

我做错了什么?

请注意,我还使用@SessionAttributes({"companyId", "itemBeansWrapper"})注释了我的控制器,因为我希望在会话中的页面之间保留包装器。

如果我离开[__${iterStat.index}__],页面编译得很好,但我认为我需要这样的东西来区分嵌套的bean。

1 个答案:

答案 0 :(得分:1)

抓住了我的错误。它应该是:

<input type="number" th:field="*{objects[__${iterStat.index}__].someProperty}"/>