personaController.java
no perfe + @DateTimeFormat
@Controller
public class PersonaController {
@Autowired
PeopleRepository peopleRepository;
@Autowired
MoviesRepository moviesRepository;
@Autowired
GenresRepository genresRepository;
protected String listarConFiltro(Filtro filtro, Model model){
List<People> personas;
// boolean mostrarReparto = false;
// boolean mostrarTrabajos = false;
if(filtro==null){
filtro = new Filtro();
personas = peopleRepository.findAll();
} else if (filtro.getTipo().equalsIgnoreCase("reparto")) {
personas = peopleRepository.findByCadenaYReparto(filtro.getCadena());
}else {
personas = peopleRepository.findByCadenaYTrabajos(filtro.getCadena());
}
model.addAttribute("personas", personas);
model.addAttribute("filtro", filtro);
return "personas";
}
@GetMapping("/")
public String doListar(Model model){
return listarConFiltro(null, model);
}
@GetMapping("/editar")
public String doEditar(@RequestParam("id")Integer id, Model model){
Movies pelicula = moviesRepository.findById(id).orElse(null);
model.addAttribute("pelicula", pelicula);
model.addAttribute("generos", genresRepository.findAll());
return "pelicula";
}
@PostMapping("/guardar")
public String doGuardar(@ModelAttribute("pelicula")Movies modelPelicula){
Movies pelicula = moviesRepository.findById(modelPelicula.getId()).orElse(null);
pelicula.setTitle(modelPelicula.getTitle());
pelicula.setRuntime(modelPelicula.getRuntime());
pelicula.setRevenue(modelPelicula.getRevenue());
pelicula.setGenresList(modelPelicula.getGenresList());
moviesRepository.save(pelicula);
return "redirect:/";
}
@PostMapping("/filtrar")
public String doFiltrar(@ModelAttribute("filtro")Filtro filtro, Model model){
// List<People> personas;
// if(filtro.getTipo().equalsIgnoreCase("reparto")){
// personas = peopleRepository.findByCadenaYReparto(filtro.getCadena());
// }else{
// personas = peopleRepository.findAll();
// }
// model.addAttribute("filtro", filtro);
// model.addAttribute("personas", personas);
//return "personas";
return listarConFiltro(filtro, model);
}
}
@DateTimeFormat(pattern = "yyyy-mm-dd")
@Temporal(TemporalType.DATE)
private Date releaseDate;
Vista
personas.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page import="es.taw.movies.entity.People" %>
<%@ page import="java.util.List" %>
<%@ page import="es.taw.movies.entity.MovieCast" %>
<%@ page import="es.taw.movies.entity.MovieCrew" %>
<%@ page import="es.taw.movies.ui.Filtro" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<%
String title = "Listado de personas";
List<People> personas = (List<People>) request.getAttribute("personas");
Filtro filtro = (Filtro) request.getAttribute("filtro");
boolean mostrarReparto = filtro.getTipo().isBlank() || filtro.getTipo().equalsIgnoreCase("reparto");
boolean mostrarTrabajador = filtro.getTipo().isEmpty() || "trabajador".equalsIgnoreCase(filtro.getTipo());
%>
<head>
<title><%=title%>></title>
</head>
<body>
<h1><%=title%></h1>
<form:form modelAttribute="filtro" action="/filtrar" method="post">
<form:radiobutton path="tipo" label="Reparto" value="reparto"/>
<form:radiobutton path="tipo" label="Trabajador" value="trabajador"/> <br>
y contiene: <form:input path="cadena"/> <form:button>Filtrar</form:button> <a href="/">Borrar Filtro</a>
</form:form>
<table border="1">
<tr>
<th>NOMBRE</th>
<%
if(mostrarReparto){
%>
<th>PELÍCULAS - PERSONAJES</th>
<%
}
if(mostrarTrabajador){
%>
<th>PELÍCULAS - CARGOS</th>
<%
}
%>
</tr>
<%
for(People p: personas){
%>
<tr>
<td>
<%=p.getName()%>
</td>
<%
if(mostrarReparto){
%>
<td>
<%
for(MovieCast cast : p.getMovieCastList()){
%>
<a href="/editar?id=<%=cast.getMovieId().getId()%>"> <%=cast.getMovieId().getTitle()%> </a> - <%=cast.getCharacterName()%> <br>
<%
}
%>
</td>
<%
}
if(mostrarTrabajador){
%>
<td>
<%
for(MovieCrew crew : p.getMovieCrewList()){
%>
<a href="/editar?id=<%=crew.getMovieId().getId()%>"> <%=crew.getMovieId().getTitle()%> </a> - <%=crew.getJob()%> <br>
<%
}
%>
</td>
<%
}
%>
</tr>
<%
}
%>
</table>
</body>
</html>
pelicula.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page import="es.taw.movies.entity.People" %>
<%@ page import="java.util.List" %>
<%@ page import="es.taw.movies.entity.MovieCast" %>
<%@ page import="es.taw.movies.entity.MovieCrew" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<%
String title = "Ficha de la película";
%>
<head>
<title><%=title%>></title>
</head>
<body>
<h1><%=title%></h1>
<form:form modelAttribute="pelicula" action="/guardar" method="post">
<table>
<tr>
<form:hidden path="id"/>
<td>Título:</td>
<td><form:input path="title"/></td>
</tr>
<tr>
<td>Duración:</td>
<td><form:input path="runtime"/></td>
</tr>
<tr>
<td>Recaudación:</td>
<td><form:input path="revenue"/></td>
</tr>
<tr>
<td>Generos:</td>
<td><form:checkboxes path="genresList" items="${generos}" itemLabel="name"/></td>
</tr>
</table>
<form:button>Guardar</form:button>
</form:form>
</body>
</html>
Repo
public interface PeopleRepository extends JpaRepository<People, Integer> {
@Query("select p from People p join p.movieCastList cast where cast.characterName like concat('%',:cadena,'%') ")
public List<People> findByCadenaYReparto(@Param("cadena")String cadena);
@Query("select p from People p join p.movieCrewList crew where crew.job like concat('%',:cadena,'%') ")
public List<People> findByCadenaYTrabajos(@Param("cadena")String cadena);
}
Filtro
package es.taw.movies.ui;
import lombok.Data;
@Data
public class Filtro {
String cadena;
String tipo="";
}