Я разрабатываю приложение, которое позволяет добавлять списки фильмов. У меня есть форма, когда я хочу поместить информацию о фильмах в 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;
}
проверьте эту статью: baeldung.com/thymeleaf-list
Я только что добавил класс Pelicula @Alien
@ tharanga-dinesh Я нашел эту статью, но у меня она не сработала
@ JaneC. Общедоступный геттер-сеттер? пожалуйста подтвердите. вот почему я сказал вам прикрепить ПОЛНЫЙ класс.
да они публичные
Приложение попытается получить свойство 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>
Я обнаружил проблему несколько дней назад, но вы правы!
прикрепить полный класс Pelicula.