ArrayList в формах в Thymeleaf

Я разрабатываю приложение, которое позволяет добавлять списки фильмов. У меня есть форма, когда я хочу поместить информацию о фильмах в ArrayList. Я хочу добавить данные фильма в форму, а затем отправить, а затем другой фильм ...

Контроллер:

@RequestMapping(value = "/formulario", method = RequestMethod.GET)
        public String addForm(Model m) {

            m.addAttribute("pelis", new ArrayList<Peliculas>());    

            return "addform";
        }

@RequestMapping(value = "/addpeli", method = RequestMethod.POST)
    public String addPedido(@ModelAttribute("pelis") List<Pelicula> pelis) 
            throws InstantiationException {

        peliculaService.addLibreria(pelis);

        return "added";
    }

Форма:

<form th:action = "@{/addpeli}" th:object = "${pelis}" method = "post">
    <fieldset>
        <legend>Nueva película</legend>

        <table>
            <tr>
                <td><label>Título: </label></td>
                <td><input type = "text" th:field = "*{titulo}" /></td>
            </tr>
            <tr>
                <td><label>Director: </label></td>
                <td><input type = "text" th:field = "*{director}" /></td>
            </tr>
            <tr>
                <td><label>Sinopsis: </label></td>
                <td><input type = "text" th:field = "*{sinopsis}" /></td>
            </tr>
               <td>
                <input type = "submit" value = "Aceptar">

                </td>
            </tr>
        </table>
    </fieldset>
</form>

Получаю следующую ошибку:

org.springframework.beans.NotReadablePropertyException: Invalid property 'titulo' 
of bean class [java.util.ArrayList]: Bean property 'titulo' is not readable or has 
an invalid getter method: Does the return type of the getter match the parameter type 
of the setter?

Я понимаю, что не могу указать значение title непосредственно в форме, но не знаю, как это сделать

РЕДАКТИРОВАТЬ:

Pelicula имеет составной первичный ключ.

Это мой класс Pelicula:

@Entity
public class Pelicula {

    @EmbeddedId
    private PkPelicula idPeli;
    private String titulo;
    private String director;
    private String sinopsis;


    public Pelicula(String titulo, String director, String sinopsis) {
        this.titulo = titulo;
        this.director = director;
        this.sinopsis = sinopsis;
    }

    public Pelicula() {
    }

    //getters and setters

Класс PkPelicula:

@Embeddable
public class PkPelicula implements Serializable {

    private static final long serialVersionUID = 1L;

    @Column(name = "id_libreria")
    private Integer idLibreria;

    @Column(name = "id_pelicula")
    private Integer idPelicula;

    public PkPelicula() {
    }

    public PkPelicula(Integer idLibreria, Integer idPelicula) {
        this.idPedido = idLibreria;
        this.idPelicula = idPelicula;
    }

прикрепить полный класс Pelicula.

Alien 29.09.2018 21:52

проверьте эту статью: baeldung.com/thymeleaf-list

tharanga-dinesh 30.09.2018 04:31

Я только что добавил класс Pelicula @Alien

Jane C. 02.10.2018 21:45

@ tharanga-dinesh Я нашел эту статью, но у меня она не сработала

Jane C. 02.10.2018 21:46

@ JaneC. Общедоступный геттер-сеттер? пожалуйста подтвердите. вот почему я сказал вам прикрепить ПОЛНЫЙ класс.

Alien 02.10.2018 21:49

да они публичные

Jane C. 05.10.2018 19:27
0
6
419
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Приложение попытается получить свойство Titulo из

List<Peliculas> -> List does not have this property so it will fail

Если вы хотите привязать свойство titulo к каждому элементу из списка, вы должны перебрать все элементы pelis в вашем тимелеафе и привязать их к полю ввода:

<tr th:each = "item, itemStat : *{pelis}">
     <td><input th:field = "*{pelis[__${itemStat.index}__].titulo}" /></td>
     <td><input th:field = "*{pelis[__${itemStat.index}__].director}" /></td>
</tr>

Я обнаружил проблему несколько дней назад, но вы правы!

Jane C. 17.10.2018 20:43

Другие вопросы по теме