#java #html #spring-boot #spring-mvc #thymeleaf
#java #HTML #весенняя загрузка #spring-mvc #thymeleaf
Вопрос:
У меня есть этот фрагмент кода в моем шаблоне Thymeleaf:
<form action="#"
th:action="@{/update/{id}(id=${user.id})}"
th:object="${user}"
method="post"
enctype="multipart/form-data">
<tr th:each="pic: ${pics}" >
<td class="col_name" >
<div class="box small">
<img th:src="'pics/' ${user.id} '/' ${pic}"/>
</div>
</td>
<td class="col_actions">
<a style="color:#808080; margin-right: 10px;">
<input type="radio" th:field="*{mainPicture}" th:value="${pic}" >Main picture<br>
</a>
</td>
<td class="col_actions">
<a href="#" style="color:#808080; text-align: center;" >
<i class="fa fa-times" aria-hidden="true" ></i>
</a>
</td>
</tr>
проверка исходного кода:
<td class="col_actions">
<a style="color:#808080; margin-right: 10px;">
<input type="radio" value="7e7f6887-c0ce-4dc3-bb95-2b9ef92fc903.jpg" id="mainPicture1" name="mainPicture" >Main picture<br>
</a>
</td>
<td class="col_actions">
<a href="#" style="color:#808080; text-align: center;" >
<i class="fa fa-times" aria-hidden="true" ></i>
</a>
</td>
</tr>
<tr >
<td class="col_name" >
<div class="box small">
<img src="pics/5/7e92cc5c-73e7-451b-9ee8-2ae43c1b0125.jpg"/>
</div>
</td>
<td class="col_actions">
<a style="color:#808080; margin-right: 10px;">
<input type="radio" value="7e92cc5c-73e7-451b-9ee8-2ae43c1b0125.jpg" id="mainPicture2" name="mainPicture" >Main picture<br>
</a>
</td>
…
на контроллере:
@PostMapping("/update/{id}")
public String updateUser(@PathVariable("id") long id, @Valid UserPayload userPayload,
BindingResult result, Model model) {
System.out.println("===================");
System.out.println( userPayload.getMainPicture());
System.out.println("===================");
..
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(NON_NULL)
public class UserPayload implements Serializable {
private Long id;
// pics
private System mainPicture;
...
}
но имеет значение null, и в шаблоне я проверил id=»mainPicture2″
Комментарии:
1. В чем вопрос?
2. Или лучше, что такое null, что вы не хотите быть нулевым?
3. Пожалуйста, поделитесь более подробным контекстом. Как
<form>
выглядит тег в вашем шаблоне? Как выглядит метод, обрабатывающий форму в вашем@Controller
классе? КакUserPayload
выглядит класс? Вы ведете себя так, как будто ваш вопрос касается Thymeleaf, хотя это не так. Визуализированные входные данные имеют как имя, так и значение — это все, что им нужно. Thymeleaf работал так, как предполагалось. Если вы не предоставите фрагменты кода Java, невозможно определить, в чем ваша ошибка.
Ответ №1:
У вас неправильный тип в вашем UserPayload
классе. Вместо:
private System mainPicture;
… у вас должно быть:
private String mainPicture;
Когда вы меняете тип, значение правильно привязывается и System.out.println( userPayload.getMainPicture());
будет 7e92cc5c-73e7-451b-9ee8-2ae43c1b0125.jpg
печататься вместо null
.
Редактировать:
Я немного расширю свой ответ.
Я предположил, что System ошибочно использовалась вместо String .
В противном случае, например System
, это ваш класс — тогда ваша проблема сводится к проблеме десериализации. Из формы в контроллер передается обычное текстовое значение (i.a. "7e92cc5c-73e7-451b-9ee8-2ae43c1b0125.jpg"
). Java должна знать, как привязать такой текст к вашей mainPicture
переменной. Если mainPicture
у вас есть какой-либо пользовательский тип, то это уже не простое задание. Вероятно, конструктора, принимающего один String
аргумент, было бы достаточно.