[JAVA] Développement d'applications Web Spring 5 MVC avec Visual Studio Code Utilisation de Spring Security 3/3 [Création de page 2/2]

introduction

Ceci est une continuation de ici. Cette fois, nous allons créer une page générale de création d'utilisateurs.

Créer un contrôleur

Créez un contrôleur pour la page de création générale des utilisateurs.

D:\JAVA\Project\securitySample\src\main\java\com\example
└─controller
  └─UserRegController.java

UserRegController.java

UserRegController.java


package com.example.web.controller;

import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.example.persistence.entity.UserInfo;
import com.example.service.AuthService;
import com.example.web.form.AuthForm;

@Controller
@RequestMapping("/userReg")
public class UserRegController {
	@Autowired
	AuthService authService;

	final static Map<String, String> CHECK_ITEMS =
			Collections.unmodifiableMap(new LinkedHashMap<String, String>() {
				private static final long serialVersionUID = 1L;

				{
					put("Rouleau 1", 		"ROLE_Role1");
					put("Rouleau 2", 		"ROLE_Role2");
					put("Rouleau 3", 		"ROLE_Role3");
				}
			});

	@GetMapping("/index")
	public String index(Model model) {
		List<UserInfo> userInfoList = authService.findUserAll();
		model.addAttribute("userInfoList", userInfoList);
		return "userReg/index";
	}

	@GetMapping("/registered")
	public String registeredGet() {
		return "userReg/registered";
	}

	@GetMapping("/insert")
	public String insertGet(Model model) {
		model.addAttribute("authForm", new AuthForm());
		model.addAttribute("checkItems", CHECK_ITEMS);
		return "userReg/insert";
	}

	@PostMapping("/insert")
	public String insertPost(Model model, RedirectAttributes attributes,
			@Valid AuthForm authForm, BindingResult bindingResult, HttpServletRequest request) {
		if (bindingResult.hasErrors()) {
			model.addAttribute("checkItems", CHECK_ITEMS);
			model.addAttribute("signupError", true);
			return "userReg/insert";
		}
		try {
			authService.insertUser(authForm);
		} catch (DataIntegrityViolationException e) {
			model.addAttribute("checkItems", CHECK_ITEMS);
			model.addAttribute("signupError", true);
			return "userReg/insert";
		}

		attributes.addFlashAttribute("message", "S'est enregistré.");
		return "redirect:/userReg/registered";
	}

	@GetMapping("/{id}/update")
	public String updateGet(Model model, @PathVariable("id") String id) {
		AuthForm authForm = authService.userRegById(id);

		model.addAttribute("authForm", authForm);
		model.addAttribute("checkItems", CHECK_ITEMS);
		return "userReg/update";
	}

	@PostMapping("/{id}/update")
	public String updatePost(Model model,
			RedirectAttributes attributes,
			@Valid AuthForm authForm, BindingResult bindingResult, HttpServletRequest request) {

		if (bindingResult.hasErrors()) {
			model.addAttribute("checkItems", CHECK_ITEMS);
			model.addAttribute("signupError", true);
			return "userReg/update";
		}
		try {
			authService.updateUser(authForm);
		} catch (DataIntegrityViolationException e) {
			model.addAttribute("checkItems", CHECK_ITEMS);
			model.addAttribute("signupError", true);
			return "userReg/update";
		}

		attributes.addFlashAttribute("message", "Cela a changé.");
		return "redirect:/userReg/registered";
	}

	@GetMapping("/{id}/delete")
	public String deleteGet(Model model, @PathVariable("id") String id) {
		AuthForm authForm = authService.userRegById(id);

		model.addAttribute("authForm", authForm);
		model.addAttribute("checkItems", Arrays.asList(authForm.getAuthority()));
		return "userReg/delete";
	}

	@PostMapping("/{id}/delete")
	public String deletePost(Model model, @PathVariable("id") String id,
			RedirectAttributes attributes,
			@Valid AuthForm authForm, BindingResult bindingResult, HttpServletRequest request) {

		try {
			authService.deleteUser(authForm.getUserId());
		} catch (DataIntegrityViolationException e) {
			model.addAttribute("signupError", true);
			return "userReg/delete";
		}

		attributes.addFlashAttribute("message", "Il a été supprimé.");
		return "redirect:/userReg/registered";
	}
}

création de vue

Créez une vue de la page générale de création d'utilisateur.

D:\JAVA\Project\securitySample\src\main\webapp\WEB-INF\templates
└─userReg
  ├─delete.html
  ├─index.html
  ├─insert.html
  ├─register.html
  ├─registered.html
  └─update.html

delete.html


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:th="http://www.thymeleaf.org"
	xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
	<head th:insert="fragment/frag01 :: htmlhead"></head>
	<title>Écran de suppression de l'utilisateur</title>
</head>
<body>
	<h1>Suppression de l'utilisateur</h1>

	<form method="post" action="#" th:action="@{delete}" th:object="${authForm}">
		<div>
			<label for="userId">Identifiant de connexion</label>
			<span th:text="*{userId}"></span>
			<input type="hidden" th:field="*{userId}">
		</div>

		<div>
			<label for="userNameJP">Nom d'utilisateur (japonais)</label>
			<span th:text="*{userNameJP}"></span>
			<input type="hidden" th:field="*{userNameJP}">
		</div>

		<div>
			<button type="submit">Effacer</button>
			&nbsp;&nbsp;&nbsp;
			<a th:href="@{/userReg/index}">Annuler</a>
		</div>
	</form>

</body>
</html>

index.html


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:th="http://www.thymeleaf.org"
	xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
	<head th:insert="fragment/frag01 :: htmlhead"></head>
	<title>Écran de la liste des utilisateurs enregistrés</title>
</head>

<body>
	<h1>Liste des utilisateurs enregistrés</h1>
	<a href="insert.html" th:href="@{insert}">s'inscrire</a>
	<div>
   		<table border="1">
    		<thead>
        		<tr>
            		<th>Identifiant d'utilisateur</th>
            		<th>Nom d'utilisateur</th>
            		<th>Nom du département</th>
            		<th>statut</th>
            		<th>rouleau</th>
            		<th>commander</th>
        		</tr>
       		</thead>
       		<tr th:each="userInfo : ${userInfoList}" th:object="${userInfo}">
           		<td th:text="*{userId}"></td>
           		<td th:text="*{userNameJP}"></td>
           		<td th:text="*{sectionNameJP}"></td>
           		<td th:if="*{enabled}">Peut être utilisé</td>
				<td th:unless="*{enabled}">Utilisation interdite</td>
				<td>
					<th:block th:each="userRoles : *{userRolesList}" th:object="${userRoles}">
						<th:block th:utext="*{authority} + '<br />'"></th:block>
					</th:block>
				</td>
           		<td>
           			<a th:href="@{*{userId} + '/update'}">Éditer</a>
           			&nbsp;&nbsp;&nbsp;
           			<a th:href="@{*{userId} + '/delete'}">Effacer</a>
           		</td>
       		</tr>
	    </table>
   	</div>
</body>
</html>

insert.html


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:th="http://www.thymeleaf.org"
	xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
	<head th:insert="fragment/frag01 :: htmlhead"></head>
	<title>Écran d'enregistrement de l'utilisateur</title>
</head>
<body>
	<h1>Enregistrement de l'utilisateur</h1>

	<form method="post" action="#" th:action="@{insert}" th:object="${authForm}">
		<div th:if="${signupError}">
			<em>Je n'ai pas pu m'inscrire.</em>
		</div>

		<div>
			<label for="userId">Identifiant de connexion</label>
			<input type="text" autofocus="autofocus" th:field="*{userId}">
		</div>

		<div th:insert="userReg/register :: register"></div>
	</form>

</body>
</html>

register.html


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:th="http://www.thymeleaf.org"
	xmlns:sec="http://www.thymeleaf.org/extras/spring-security">

	<div th:fragment="register" th:remove="tag">
		<div>
			<label for="password">mot de passe</label>:
			<input type="password" th:field="*{password}">
			<em th:if="${#fields.hasErrors('password')}" th:errors="*{password}">Password Error</em>
		</div>

		<div>
			<label for="userNameJP">Nom d'utilisateur (japonais)</label>
			<input type="text" th:field="*{userNameJP}">
		</div>

		<div>
			<label for="userId">Nom du département (japonais)</label>
			<input type="text" th:field="*{sectionNameJP}">
		</div>

		<div>
			<label>
				<input type="checkbox" id="enabled" th:field="*{enabled}">Activation
			</label>
		</div>

		<div>
			<label class="control-label col-sm-2">rouleau</label>
				<div th:each="item : ${checkItems}">
					<label>
						<input type="checkbox" name="authority" th:value="${item.value}" th:text="${item.key}" th:field="*{authority}">
					</label>
				</div>
			<span th:if="${#fields.hasErrors('authority')}" th:errors="*{authority}" class="help-block">error!</span>
		</div>

		<div>
			<button type="submit">enregistrement</button>
			&nbsp;&nbsp;&nbsp;
			<a th:href="@{/userReg/index}">Annuler</a>
		</div>
	</div>
</html>

registered.html


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:th="http://www.thymeleaf.org"
	xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
	<head th:insert="fragment/frag01 :: htmlhead"></head>
	<title>Message d'enregistrement de l'utilisateur</title>
</head>
<body>
	<h1><span th:text="${message}">message</span></h1>
	<a th:href="@{index}">Revenir à la liste des utilisateurs</a>
</body>
</html>

update.html


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:th="http://www.thymeleaf.org"
	xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
	<head th:insert="fragment/frag01 :: htmlhead"></head>
	<title>Écran d'édition de l'utilisateur</title>
</head>
<body>
	<h1>Modifier l'utilisateur</h1>

	<form method="post" action="#" th:action="@{update}" th:object="${authForm}">
	<div th:if="${signupError}">
			<em>Impossible de mettre à jour.</em>
		</div>
		<div>
			<label for="userId">Identifiant de connexion</label>
			<span th:text="*{userId}"></span>
			<input type="hidden" th:field="*{userId}">
		</div>

		<div th:insert="userReg/register :: register"></div>
	</form>

</body>
</html>

Cette source d'échantillon

Téléchargé sur GitHub. https://github.com/t-skri1/SpringSample03

Résumé

Ceci termine la page générale de création d'utilisateur. Le projet est maintenant terminé. Veuillez le compiler et l'exécuter. Veuillez également essayer la différence de comportement en fonction du rouleau.

Pratiquez le développement d'applications Web Spring5 MVC avec Visual Studio Code

C'était juste une douleur de ne pas être déployé à chaud. J'y suis habitué, mais j'ai senti qu'Eclipse ne me convenait pas mieux. N'y a-t-il pas beaucoup de demande maintenant? Est-ce difficile à faire parce que ce n'est pas un ressort de démarrage? La prochaine fois, j'essaierai de développer une application Web avec Boot avec Visual Studio Code.

Recommended Posts

Développement d'applications Web Spring 5 MVC avec Visual Studio Code Utilisation de Spring Security 2/3 [Création de page 1/2]
Développement d'applications Web Spring 5 MVC avec Visual Studio Code Utilisation de Spring Security 3/3 [Création de page 2/2]
Développement d'applications Web Spring 5 MVC avec Visual Studio Code Utilisation de Spring Security 1/3 [Préparation]
Développement d'applications Web Spring5 MVC avec création de modèles Visual Studio Code Maven
Développement d'applications Web Spring5 MVC avec Visual Studio Code Hello World Creation
Développement d'applications Web Spring5 MVC avec connexion Visual Studio Code SQL Server
Développement d'applications Web Spring Boot2 avec création de Visual Studio Code Hello World
Développement d'applications Web Spring Boot2 avec connexion Visual Studio Code SQL Server
Développement d'applications Web Spring5 MVC avec construction de l'environnement de code Visual Studio (installation de JDK11 / Maven / Tomcat / Visual Studio Code)
Créer un environnement de développement Web APP avec Java + Spring avec Visual Studio Code
Démarrez le développement d'applications Web avec Spring Boot
Créer un environnement de développement de programme Java avec Visual Studio Code
[Spring Boot] Création d'applications Web
Construction d'environnement de développement d'applications Web Java avec VS Code (struts2)
Un enregistrement de la configuration d'un environnement de développement Java avec Visual Studio Code
Exécutez l'application WEB avec Spring Boot + Thymeleaf
[Développement d'applications Jakarta EE 8 avec Gradle] 2. Création de projet
Prise en main des programmes Java à l'aide de Visual Studio Code
Pourquoi pouvez-vous développer Java avec Visual Studio Code?
À peu près le flux de développement d'applications Web avec Rails.
Mémo de développement d'applications Web avec MVN, Tomcat, JSP / Servlet avec VScode
La première application WEB avec Spring Boot-Making a Pomodoro timer-
Pour recevoir une demande vide avec Spring Web MVC @RequestBody