我用百里香叶和几个嵌套片段创建了一个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";
}
}