Весенняя загрузка кнопка начальной загрузки переключатель Thymeleaf

#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 аргумент, было бы достаточно.