Давайте посмотрим на ваш ввод
<input type="text" th:field="*{fileName}" th:value="#{file.fileName}" th:text="${file.fileName}"/>
При отправке формы вы отправляете контроллеру значение вашего ввода в атрибуте «fileName» внутри вашего объекта «filetobind», это происходит из-за того, как вы определили th:field
и форму th:object
, и это хорошо.
Теперь для части th: value и почему она не работает для вас: синтаксис #{...}
предназначен для экстернализации текстовых литералов в файлах, поэтому вы делаете свой HTML более «универсальным», цитируя документацию:
Экстернализующий текст извлекает фрагменты кода шаблона из
файлы шаблонов, чтобы их можно было хранить в отдельных отдельных файлах
(обычно файлы .properties) и что их легко заменить
эквивалентными текстами, написанными на других языках (процесс называется
интернационализация или просто i18n). Экстернализованные фрагменты текста
обычно называются «сообщениями».
В сообщениях всегда есть ключ, который их идентифицирует, а Thymeleaf позволяет
указать, что текст должен соответствовать конкретному сообщению
с синтаксисом # {...}
Так, например, они хороши для меток, но не для входного содержимого (входных значений).
Теперь, поскольку это текстовый ввод, вы можете либо пропустить часть th:value
и позволить пользователю заполнить ввод, либо вы можете присвоить ему значение с синтаксисом ${...}
, который обращается к переменной, передаваемой из контроллера. , Цитируя документ:
Выражение $ {today} просто означает «получить переменную, вызванную сегодня»,
но эти выражения могут быть более сложными (например, $ {user.name} для
«Получить переменную с именем user и вызвать ее метод getName ()».
Измените значение на th:value="${file.fileName}"
, и все будет в порядке (если вы предоставите переменную файла из контроллера).