#java #spring #spring-boot #thymeleaf
Вопрос:
Я создал форму с помощью SpringBoot и Thymeleaf. Привязка хорошо работает с @ModelAtribute. Это работает правильно, независимо от того, сколько раз я отправляю.
Однако, если время сеанса истекает после отправки один раз, что-то странное происходит, когда я отправляю сообщение после повторного входа в систему. Вот такая история.
- отправьте строку «abc».
- время сеанса истекло, поэтому я повторно вошел в систему
- отправьте строку «def» в той же форме
- каким-то образом символы «def,abc» связаны!
Еще более странно, что это происходит в разных браузерах.
- отправьте строку «abc» в GoogleChrome
- время сеанса истекло. Затем войдите в систему с помощью Firefox.
- отправьте строку «def» в Firefox
- каким-то образом символы «def,abc» связаны!!!
Обратите внимание, что в результате request.getParameter()
правильно выводится «def». Что не так, так это результат привязки.
test.html
lt;form id="mainForm" name="mainForm" th:action="@{/form/submit}" th:object="${testFrom}" method="post"gt; lt;input type="text" class="form-control" th:field="*{inputTitle}" th:classappend="${#fields.hasErrors('inputTitle')} ? is-invalid"gt; lt;/formgt;
TestController.java
@PostMapping(value = { "/form/submit" }) public String form(@Validated TestForm testFrom, BindingResult result, HttpServletRequest request) throws Exception { System.out.println(testFrom.getInputTitle()); // "def,abc" System.out.println(request.getParameter("inputTitle")); // "def" return "test"; }
TestForm.java
public class TestForm { @NotEmpty(message = "not empty") @Size(max = 255, message = "size over") private String inputTitle; public String getInputTitle() { return inputTitle; } public void setInputTitle(String inputTitle) { this.inputTitle = inputTitle; } }
pom.xml
lt;parentgt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-starter-parentlt;/artifactIdgt; lt;versiongt;2.5.4lt;/versiongt; lt;relativePath /gt; lt;/parentgt;
Может кто-нибудь, пожалуйста, дать мне решение?
Спасибо.
Комментарии:
1.
form
иtestFrom
являются различными примерамиTestForm
. Похоже, у вас есть 2 формы, которые связаны, одна предназначена для запроса, другая-это какой-то общий синглтон, который появляется. Или этот код не тот код, который вы на самом деле используете, и является упрощенной версией, не отображающей реальную проблему (и я подозреваю, что это последний случай!). Также в вашей форме выth:field
неth:value
должны использовать. Ваша форма также странно привязана к другому объекту, чем использование значения from. В целом, код, который вы разместили здесь, довольно грязный.2. Извините, я ввел старый код. Я изменил «форму» на «testFrom». Я изменю его на «th:поле» и попробую.
3. Несмотря на это, ваша HTML-форма по-прежнему неверна и ссылается на разные объекты.
4. Мне жаль, что мой интеллект такой вульгарный. Я изменил lt;формуgt;, но результат был тот же.
5. Вы, должно быть, где-то сохраняете состояние, так что то, что вы здесь показываете, — это не вся картина.