ArrayList на формах в Thymeleaf - PullRequest
       9

ArrayList на формах в Thymeleaf

0 голосов
/ 29 сентября 2018

Я разрабатываю приложение, которое позволяет добавлять списки фильмов.У меня есть форма, когда я хочу разместить информацию о фильмах в 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;
    }

1 Ответ

0 голосов
/ 17 октября 2018

Приложение будет пытаться получить свойство 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>
...