我有一个这样的包装类:
@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。
答案 0 :(得分:1)
抓住了我的错误。它应该是:
<input type="number" th:field="*{objects[__${iterStat.index}__].someProperty}"/>