传递对象并仅在片段中恢复它

时间:2019-04-18 13:56:02

标签: spring fragment thymeleaf

我用百里香叶和几个嵌套片段创建了一个html。这是一个简单的维护搜索,列表和新建/编辑/删除。 关键是我希望当我调用控制器方法时,我恢复一个对象并将其仅重定向到一个片段,并仅更改该片段。这可能吗? 我附上为此目的实现的代码。当前,当我单击编辑功能时,它会显示空白屏幕。

方法是editUsuario

gestionUsuario.html

<!DOCTYPE html>
<html lang="es"
  xmlns:th="http://www.thymeleaf.org"
  xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
  layout:decorate="~{layouts/default}">

<body>
    <div id="page" layout:fragment="content">

        <!-- FRAGMENT BUSCADOR -->
        <div th:insert="fragments/gestionUsuariosBuscador :: gestionUsuariosBuscador"></div>

        <!-- FRAGMENT TABLA RESULTADOS -->
        <div th:insert="fragments/gestionUsuariosListado :: gestionUsuariosListado"></div>

        <!-- FRAGMENT NUEVO/EDITAR DATO -->
        <div th:replace="fragments/gestionUsuariosAltaEdicion :: gestionUsuariosAltaEdicion"></div>

    </div>
</body>

</html>

gestionUsuariosAltaEdicion.html

<div th:fragment="gestionUsuariosAltaEdicion">  
    <div th:if="${usuario} != null" class="editDatoForm">
        <h1 class="titleEditForm" th:utext="#{title.gestionUsuario.modificarUsuario}"></h1>

        <form class="contentEditDatoForm" action="#" th:action="@{/changeUsuario}" th:object="${usuario}"  method="post">
            <input type="hidden" th:name="id" th:value="${usuario.id}" />
            <div class="form-group" >
                <label for="nombre" th:utext="#{label.nombre}"></label><input type="text"
                    th:field="*{nombre}" class="form-control" id="nombre"
                    aria-describedby="basic-addon1" >
                <span th:if="${#fields.hasErrors('nombre')}" th:errors="*{nombre}">Nombre Error</span>
            </div>
            <div class="form-group" >
                <label for="apellido1" th:utext="#{label.apellido1}"></label><input type="text"
                    th:field="*{apellido1}" class="form-control" id="apellido1"
                    aria-describedby="basic-addon1" >
                <span th:if="${#fields.hasErrors('apellido1')}" th:errors="*{apellido1}">Apellido1 Error</span>
            </div>

            <div class="form-group" >
                <label for="apellido2" th:utext="#{label.apellido2}"></label><input type="text"
                    th:field="*{apellido2}" class="form-control" id="apellido2"
                    aria-describedby="basic-addon1" >
            </div>

            <div class="form-group" >
                <label for="email" th:utext="#{label.email}"></label><input type="text"
                    th:field="*{email}" class="form-control" id="email"
                    aria-describedby="basic-addon1" >
                <span th:if="${#fields.hasErrors('email')}" th:errors="*{email}">Email Error</span>
            </div>
            <div class="form-group" >
                <label for="username" th:utext="#{label.username}"></label><input type="text"
                    th:field="*{username}" class="form-control" id="username"
                    aria-describedby="basic-addon1" >
                <span th:if="${#fields.hasErrors('username')}" th:errors="*{username}">NombreUsuario Error</span>
            </div>
            <div class="form-group ${status.error ? 'has-error' : ''}" >

                <label for="identificadorDepartamento" th:utext="#{label.departamento}"></label>
                <select  id="identificadorDepartamento" name="identificadorDepartamento" class="form-control" aria-describedby="basic-addon1" >
                    <option th:each="departamentoBDD : ${departamentos}" 
                            th:value="${departamentoBDD.getId()}"
                            th:selected="${departamentoBDD.isSelected(session.departamentoUsuarioId)}" 
                            th:utext="${departamentoBDD.getDescripcionCastellano()}"/>
                </select>
                <span th:if="${#fields.hasErrors('identificadorDepartamento')}" th:errors="*{identificadorDepartamento}">Departamento Error</span>
            </div>
            <div class="form-group ${status.error ? 'has-error' : ''}" >

                <label for="identificadorRole" th:utext="#{label.rol}"></label>
                <select  id="identificadorRole" name="identificadorRole"  class="form-control" aria-describedby="basic-addon1" >
                    <option th:each="roleBDD : ${roles}" 
                            th:value="${roleBDD.getId()}" 
                            th:selected="${roleBDD.isSelected(session.rolUsuarioIdSelected)}" 
                            th:utext="${roleBDD.getDescripcionCastellano()}"/>
                </select>
                <span th:if="${#fields.hasErrors('identificadorRole')}" th:errors="*{identificadorRole}">Role Error</span>
            </div>

            <div class="form-group ${status.error ? 'has-error' : ''}">
                <label for="passwordIntroducido" th:utext="#{label.password}"></label><input type="password"
                    th:field="*{passwordIntroducido.password}" class="form-control" id="passwordIntroducido"
                    aria-describedby="basic-addon1"  />
                <span th:if="${#fields.hasErrors('passwordIntroducido')}" th:errors="*{passwordIntroducido}">Password Error</span>
            </div>
            <div class="form-group ${status.error ? 'has-error' : ''}">
                <label for="passwordConfirm" th:utext="#{label.passwordConfirm}"></label><input type="password"
                    th:field="*{passwordConfirm}" class="form-control" id="passwordConfirm"
                    aria-describedby="basic-addon1"  />
                <span th:if="${#fields.hasErrors('passwordConfirm')}" th:errors="*{passwordConfirm}">PasswordConfirm Error</span>
            </div>          
            <div class="form-group">
            <button type="submit" name="action" value="cerrar" class="btn btn-editDatoForm" th:utext="#{label.btnCerrar}"></button>
            <button type="submit" name="action" value="guardar" class="btn btn-editDatoForm" th:utext="#{label.btnGuardar}"></button>
            </div>
        </form>
    </div>
</div>


GestionUsuariosListado.html

<!-- Tabla listado gestion Usuario-->
<div  th:if="${gestionUsuarioForm.usuarios} != null" th:fragment="gestionUsuariosListado">
    <table id="tablaDatosMaestros" th:unless="${#lists.isEmpty(gestionUsuarioForm.usuarios)}">
        <thead>
            <tr class="headStyle">
                <th class="paddingTable" th:utext="#{label.nombre}"></th>
                <th class="paddingTable" th:utext="#{label.rol}"></th>
                <th class="paddingTable" th:utext="#{label.area}"></th>
                <th class="paddingTable" th:utext="#{label.departamento}"></th>
                <th class="paddingTable" th:utext="#{label.fechaBaja}"></th>
                <th class="paddingTable" th:utext="#{label.acciones}"></th>

            </tr>
        </thead>
        <tr class="rowStyle" th:each="usuario : ${gestionUsuarioForm.usuarios}">
            <td class="paddingTable" th:utext="${usuario.nombre}"></td>
            <td class="paddingTable" th:utext="${usuario.rol.descripcionCastellano}"></td>
            <td class="paddingTable" th:utext="${usuario.departamento.area.descripcionCastellano}"></td>
            <td class="paddingTable" th:utext="${usuario.departamento.descripcionCastellano}"></td>
            <td class="paddingTable" th:utext="${usuario.fechaBaja}"></td>
            <td class="paddingTable">
                <form th:action="@{/editUsuario}"  method="post"> 
                    <input type="hidden" id="idUsuario" name="idUsuario" th:value="${usuario.id}" />
                    <button id="editDato" name="action" value="edit" type="submit" class="btn2">
                        <i class="fas fa-pencil-alt iconStyle"></i>
                    </button>
                </form>
                <form th:action="@{/removeUsuario}"  method="post">
                    <input type="hidden" id="idUsuario" name="idUsuario" th:value="${usuario.id}" />
                    <button id="removeDato" name="action" value="remove" type="submit" class="btn2">
                        <i class="fas fa-trash-alt iconStyle"></i>
                    </button>
                </form>
            </td>
        </tr>
    </table>
</div>

GestionUsuarioController


package com.soprasteria.mater.controller;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.soprasteria.mater.dto.AreaDTO;
import com.soprasteria.mater.dto.DepartamentoDTO;
import com.soprasteria.mater.dto.GestionUsuarioDTO;
import com.soprasteria.mater.dto.RolDTO;
import com.soprasteria.mater.dto.UsuarioDTO;
import com.soprasteria.mater.serviceInterface.IAreaService;
import com.soprasteria.mater.serviceInterface.IDepartamentoService;
import com.soprasteria.mater.serviceInterface.IRoleService;
import com.soprasteria.mater.serviceInterface.IUsuarioService;
import com.soprasteria.mater.validator.UsuarioValidator;

@Controller
public class GestionUsuarioController {
    private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
    @Autowired
    private IAreaService areService;

    @Autowired
    private IRoleService rolService;

    @Autowired
    private IDepartamentoService departamentoService;

    @Autowired
    private IUsuarioService usuarioService;

    @Autowired
    private IRoleService roleService;

    @Autowired
    private UsuarioValidator usuarioValidator;

    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        Object target = binder.getTarget();
        if (target == null) {
            return;
        }

        if (target.getClass() == UsuarioDTO.class) {
            binder.setValidator(usuarioValidator);
        }
    }

    @RequestMapping(value = { "/gestionUsuario" }, method = RequestMethod.GET)
    public String gestionUsuario(Model model, HttpSession session) {

        cargaCombosGestionUsuario(model);
        model.addAttribute("gestionUsuarioForm", new GestionUsuarioDTO());
        return "gestionUsuario";
    }

    @RequestMapping(value = "/busquedaGestionUsuario", method = RequestMethod.POST)
    public String busquedaGestionUsuario(@ModelAttribute("gestionUsuarioForm") GestionUsuarioDTO gestionUsuarioDTO, BindingResult bindingResult, Model model, HttpSession session) {

        cargaCombosGestionUsuario(model);
        List<UsuarioDTO> usuarios=usuarioService.getBusquedaUsuario(gestionUsuarioDTO.getNombre(),gestionUsuarioDTO.getIdArea(), gestionUsuarioDTO.getIdDepartamento(), gestionUsuarioDTO.getIdRol());
        gestionUsuarioDTO.setUsuarios(usuarios);
        model.addAttribute("gestionUsuarioForm", gestionUsuarioDTO);
        return "gestionUsuario";
    }



    @RequestMapping(value = "/editUsuario", method = RequestMethod.POST)
    public String editUsuario( @ModelAttribute("idUsuario") Integer idUsuario, BindingResult bindingResult, Model model, HttpSession session) {

        cargaCombosGestionUsuario(model);
        UsuarioDTO usuario=usuarioService.getUsuarioById(idUsuario);
        model.addAttribute("usuario", usuario);
        return "gestionUsuario :: gestionUsuariosAltaEdicion";
    }

    @RequestMapping(value = "/removeUsuario", method = RequestMethod.POST)
    public String removeUsuario(@ModelAttribute("gestionUsuarioForm") GestionUsuarioDTO gestionUsuarioDTO, BindingResult bindingResult, Model model, HttpSession session) {

        cargaCombosGestionUsuario(model);
        UsuarioDTO usuario=usuarioService.getUsuarioById(gestionUsuarioDTO.getIdUsuario());
        gestionUsuarioDTO.setUsuario(usuario);
        model.addAttribute("usuario", usuario);

        return "gestionUsuario :: gestionUsuariosAltaEdicion";
    }


    @RequestMapping(value = "/changeUsuario", method = RequestMethod.POST)
    public String changeUsuario(@ModelAttribute("usuario") UsuarioDTO usuarioDTO, BindingResult bindingResult, Model model) {

        cargaCombosGestionUsuario(model);
        DepartamentoDTO departamanto=departamentoService.getDepartamento(usuarioDTO.getIdentificadorDepartamento());
        RolDTO role=roleService.getRoleById(usuarioDTO.getIdentificadorRole());
        usuarioDTO.setDepartamento(departamanto);
        usuarioDTO.setRol(role);
        usuarioService.save(usuarioDTO);

        return "gestionUsuario";
    }

    private void cargaCombosGestionUsuario (Model model) {
        List<AreaDTO> areas = areService.getAreas();
        List<DepartamentoDTO> departamentos = departamentoService.getDepartamentos();
        List<RolDTO> roles = rolService.getRoles();
        model.addAttribute("areas", areas);
        model.addAttribute("departamentos", departamentos);
        model.addAttribute("roles", roles);
    }


    @ExceptionHandler(Exception.class)
    public String handleError(Exception e) {
        LOGGER.error("Exception:",e);
        return "error";
    }
}

0 个答案:

没有答案