Thymeleaf th: объект с th: с переменнойJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Thymeleaf th: объект с th: с переменной

Сообщение Anonymous »

Я пытаюсь централизовать имена атрибутов модели Spring в классе ModelConstants для повышения безопасности рефакторинга, но сталкиваюсь с постоянными проблемами при попытке использовать эти константы с th:object в формах Thymeleaf. Хотя доступ к константам для th:if или th:each работает хорошо, th:object кажется проблематичным.
Моя цель — иметь единый источник достоверности для всех имен атрибутов модели (например, "doctorSearchForm") с использованием общедоступных статических финальных констант String в классе Java и использовать эти константы как в моих внутренних контроллерах Spring, так и в шаблонах Thymeleaf. Это гарантирует, что если я изменю имя атрибута модели, я изменю его только в одном месте.
Класс ModelConstants

Код: Выделить всё

    public final class ModelConstants {

public static final String DOCTOR_SEARCH_FORM = "doctorSearchForm";
public static final String DOCTOR_SEARCH_RESULTS = "doctorSearchResults";
public static final String PAGE_ALERT_LIST = "pageAlerts";

private ModelConstants() {}
}
Класс контроллера

Код: Выделить всё

@GetMapping("/booking")
public String booking(Model model) {
if (!model.containsAttribute(ModelConstants.DOCTOR_SEARCH_FORM)) {
model.addAttribute(ModelConstants.DOCTOR_SEARCH_FORM, new DoctorSearchDto());
}
return "booking";
}
Шаблон (html)

Код: Выделить всё

    th:with="searchForm=${#vars[T(com.example.model.ModelConstants).DOCTOR_SEARCH_FORM]}">

 // ISSUE HERE

...



Thymeleaf, похоже, не нравится, когда я пытаюсь связать a с использованием th:object и объекта формы, на который ссылается переменная, и выдается длинное исключение с одним из сообщений:

Код: Выделить всё

IllegalStateException: Neither BindingResult nor plain target object for bean name 'searchForm' available as request attribute
Я попытался установить атрибут 'id' элемента на 'searchForm', и после проверки сгенерированного HTML-кода он показывает фактический объект DoctorSearchDto и сохраненные его значения:

Код: Выделить всё


Подробнее здесь: [url]https://stackoverflow.com/questions/79646985/thymeleaf-thobject-with-thwith-variable[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»