Correction TP08

Modérateurs : graffiop, jmdouin, agoncal, mlebihan

velitc_v
Messages : 64
Inscription : 04 oct. 2019 14:53

Correction TP08

Message par velitc_v » 15 déc. 2019 19:32

Bonjour,
J'ai eu des soucis de compréhension avec ce dernier TP. Déjà, je n'avais pas compris que username était l'id, je pensais que c'était un nouveau champs...
Et puis je n'ai pas compris ce qu'était Model dans le controller. je suis allé voir la dochttps://docs.spring.io/spring/docs/curr ... Model.html et le cours mais je ne suis pas sûr du fonctionnement.

Code : Tout sélectionner

public String newAccount(Model model) {
		model.addAttribute("userDTO", new UserDTO());
		return "new-account";
}
Je fais des suppositions : Est ce que cette méthode lors du get crée un userDTO qui sera disponible dans le HTML via

Code : Tout sélectionner

 th:object="${userDTO} 
. lorsqu'on appuiera sur submit, les données sont injectées dans l'objet grace au champs

Code : Tout sélectionner

th:field="*{userDTO.fieldName}"
C'est bien ça ?
Dans le post, Pouvez vous m'expliquer cette ligne :

Code : Tout sélectionner

 model.addAttribute("customerCreated",true);
J'imagine que l'idée est de récupérer le message dans la vue... avec la balise suivante ?

Code : Tout sélectionner

 th:field="*{customerCreated}
?

Dans le html du formulaire à quoi correspond name ? on peut y mettre ce qu'on veut ?

Code : Tout sélectionner

<form class="form-horizontal" method="post"
			th:action="@{/new-account}" name="userForm" th:object="${userDTO}">
Est ce qu'on pouvait utilisé BindingResult à la place de model ? et dans ce cas quel aurait été le code et le html ?
Merci,
V...g...

velitc_v
Messages : 64
Inscription : 04 oct. 2019 14:53

Re: Correction TP08

Message par velitc_v » 15 déc. 2019 19:56

Le control du password est dans UserServiceImpl comme ci-dessous. Je l'aurais plutôt vu dans User ou dans le UserDTO pour que le controller ne créer pas d'objet. A débattre ?

Code : Tout sélectionner

if(userDTO.getPassword().length()<4)
        	throw new CreateException("password's length exception (mini. of 4 char. required)");
        user.setPassword(bCryptPasswordEncoder.encode(userDTO.getPassword()));
                user.checkData();
        
merci V..e

bruye_st
Messages : 11
Inscription : 27 nov. 2019 15:14

Re: Correction TP08

Message par bruye_st » 16 déc. 2019 14:42

Bonjour,

- Model est une interface du framework Spring. Elle permet la transmission de données entre le controller et la vue. Le Model fourni en paramètre de la méthode du controller est injecté par le framework. Le Model fonctionne comme une Map (clé, valeur).
Les entrées (clé,valeur) ajoutées au modèle dans le controller seront accessibles dans la vue selon la syntaxe que nous avons vue.
Ainsi une entrée model.addAttribute("maClé","maListe") pour être récupéré dans la vue par
<div th:each="element : ${maList}">
<div th:text="${element.unAttribut}" ></div>
</div>

- La méthode @GetMapping(path = "/new-account") public String newAccount(Model model) du controller a permis à la vue (new-account.html) d'accéder à un objet userDTO vide. C'est celui-ci sur lequel nous pointons avec "th:object="${userDTO} ". Ensuite, effectivement, <input th:field="${userDTO.username}" ..." permet que les données saisies dans ce champ du formulaire soient affectées à l'attribut username à l'issue du POST. idem pour les autres champs.

- model.addAttribute("customerCreated",true) : Les exceptions sont récupérées et un message est affiché. L'idée ici est d'afficher également un message en cas de création réussie, avec un code du type
<h5 align="center" th:if="${customerCreated}!=null" th:text="#{new.account.creation.success}"></h5>
Mais apparemment il y a un oubli par rapport à cela dans index.html
Nous le rajouterons pour les TP10 et suivants.

- name est le nom du formulaire qui doit être unique. On ne l'utilise pas. Il est donc inutile ici (je ne l'ai même pas dans ma version).

Stéphane Bruyère

velitc_v
Messages : 64
Inscription : 04 oct. 2019 14:53

Re: Correction TP08

Message par velitc_v » 16 déc. 2019 21:30

Bonjour merci pour votre réponse. C'est très clair.
Est ce qu'on pouvait utilisé BindingResult à la place de model ? et dans ce cas quel aurait été le code et le html ?
merci,
v

bruye_st
Messages : 11
Inscription : 27 nov. 2019 15:14

Re: Correction TP08

Message par bruye_st » 16 déc. 2019 21:45

Oui, on aurait pu utiliser BindingResult pour la gestion des erreurs, mais pas pour retourner un message en cas de réussite.
Index.html et messages.properties ont été modifiés pour insérer le message de réussite de création du compte en utilisant le model.addAttribute("customerCreated",true) du controller.

velitc_v
Messages : 64
Inscription : 04 oct. 2019 14:53

Re: Correction TP08

Message par velitc_v » 17 déc. 2019 6:47

ok donc c'est en plus du model. merci

Répondre