Zum Inhalt springen

springboot.firststeps(P1)

Image description

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="";
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert