[英]Spring Boot form data binding a list with FreeMarker
我正在嘗試將表單綁定到數據傳輸對象。 該表格是一個FreeMarker模板。 它們如下:
數據對象:
@Data
public class TransferObject {
private List<Subclass> subclassInstances;
public TransferObject(Data data) {
// this takes the data and populates the object, also works
// we end up with a list of subclasses.
}
@Data //lombok -> generates getters and setters
@AllArgsConstructor
private static class Subclass {
private String id;
private String code;
}
}
控制器:
@GetMapping({"/endpoint", "/endpoint"})
public String endpoint(Model model, @RequestParam(value="code", required=false, defaultValue="") String code) {
// this retrieves the data, but that works so it's irrelevant here
Data data = this.dataService.findByCode(code).orElse(null);
if(data != null) {
TransferObject transferObject = new TransferObject(data);
model.addAttribute("data", transferObject);
} else {
log.warn("no data found");
}
return "endpoint";
}
Freemarker模板:
<form:form action="/endpoint" method="post" modelAttribute="data">
<#if data??>
<#list data.subclasses as subclass>
${subclass} <!-- this shows an object with 2 fields that are filled -->
<@spring.bind "data.subclasses[${subclass?index}].id"/>
<input type="text" value="${subclass.id}"/> <!-- This line fails -->
<@spring.bind "data.subclasses[${subclass?index}].code"/>
<input type="text" value="${subclass.code}"/>
</#list>
</#if>
</form:form>
模板中顯示以下錯誤:
[以下內容評估為null或丟失:==> sublcass.id]我不明白這一點,因為我將子類打印在該類的正上方。
我也嘗試改變
<input type="text" value="${subclass.id}"/>
至
<input type="text" value="${data.subclasses[subclass?index].id}"/>
但隨后它告訴我“數據”為空或丟失。 我究竟做錯了什么?
我畢竟找到了問題:
問題出在TranferObject中。 Sublclass類具有private
訪問權限。 因此找不到任何獲取器或設置器。 這就是為什么FreeMarker模板找不到.id
屬性的原因。
當我嘗試以普通Java代碼訪問getter時,出現編譯錯誤: Error:(65, 77) java: getId() in Data.Subclass is defined in an inaccessible class or interface
,我認為這比聲明它更好。空或丟失。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.