Данные формы Spring Boot, связывающие список с FreeMarker - PullRequest
1 голос
/ 04 июня 2019

Я пытаюсь привязать мою форму к объекту передачи данных.Форма представляет собой шаблон 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>

Тамэто ошибка в шаблоне, которая гласит:
[Следующее оценивается как нулевое или отсутствует: ==> sublcass.id] Я не получаю это, потому что я печатаю подкласс чуть выше этого, и он там ..

Я также пытался изменить

<input type="text" value="${subclass.id}"/>

на

<input type="text" value="${data.subclasses[subclass?index].id}"/>

Но тогда он говорит мне, что «данные» нулевые или отсутствуют.Что я делаю не так?

1 Ответ

0 голосов
/ 17 июня 2019

Я все-таки нашел проблему:

Проблема была в TranferObject. Класс Sublclass имеет private доступ. так что никаких добытчиков или сеттеров не найдено. Вот почему шаблон FreeMarker не может найти свойство .id.

Когда я попытался получить доступ к геттеру в обычном Java-коде, я получил ошибку компиляции: Error:(65, 77) java: getId() in Data.Subclass is defined in an inaccessible class or interface Что, на мой взгляд, лучше, чем восклицать, что оно нулевое или отсутствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...