簡體   English   中英

Spring Boot表單數據與FreeMarker綁定列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM