Последнее значение, отправленное в Форме, добавляется в виде списка, разделенного запятыми

#java #spring #spring-boot #thymeleaf

Вопрос:

Я создал форму с помощью SpringBoot и Thymeleaf. Привязка хорошо работает с @ModelAtribute. Это работает правильно, независимо от того, сколько раз я отправляю.

Однако, если время сеанса истекает после отправки один раз, что-то странное происходит, когда я отправляю сообщение после повторного входа в систему. Вот такая история.

  1. отправьте строку «abc».
  2. время сеанса истекло, поэтому я повторно вошел в систему
  3. отправьте строку «def» в той же форме
  4. каким-то образом символы «def,abc» связаны!

Еще более странно, что это происходит в разных браузерах.

  1. отправьте строку «abc» в GoogleChrome
  2. время сеанса истекло. Затем войдите в систему с помощью Firefox.
  3. отправьте строку «def» в Firefox
  4. каким-то образом символы «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. Вы, должно быть, где-то сохраняете состояние, так что то, что вы здесь показываете, — это не вся картина.