Configuration minimale lors du passage d'un objet du Controller au modèle affiché dans Thymeleaf
--Thymeleaf a été installé
La classe Form n'est pas un ripository, mais une classe d'objets qui est passée lors de l'échange entre le contrôleur et la vue en mettant une valeur sur une classe java ordinaire.
La classe java peut être une classe POJO --Getter et Setter sont absolument nécessaires --Lanbok peut être utilisé. Ajoutez simplement @Data et l'accesseur est correct
ContractListForm.java
package com.contract.web;
import lombok.Data;
@Data
public class ContractListForm{
private String anken_kbn; //Classification des articles
private String anken_name; //Titre du projet
}
--Créez une instance de la classe Form et placez-la dans le contrôleur --Passez une instance de la classe Form à l'écran
--Générer la classe précédente avec la méthode avec l'annotation @ModelAttribute Cette méthode annotée est automatiquement appelée lorsque la méthode @RequestMapping est appelée (à la réception de la requête). Créez une instance de la classe de formulaire avec cette méthode annotée L'instance créée ici sera enregistrée dans la portée de la requête -Passez l'objet à l'écran avec la méthode @RequestMapping. Dans la méthode addObject, définissez le nom de l'instance côté écran avec le premier argument, recevez de l'écran avec ce nom Passez l'objet qui est réellement passé dans le deuxième argument
ContractListsController
@ModelAttribute
ContractListForm setUpForm() {
return new ContractListForm();
}
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView index(ModelAndView mav) {
mav.setViewName("index");
mav.addObject("contractListF", new ContractListForm()); //Instance de formulaire de recherche
return mav;
}
index.html
<form method="post" action="/Contract/search" th:object="${contractListF}">
index.html
<input type="text" th:field="*{anken_kbn}" class="form-control" aria-describedby="basic-addon2"></input>
<input type="text" th:field="*{anken_name}" class="form-control" aria-describedby="basic-addon2"></input>
――Le champ qu'il contient est
Si ce paramètre n'est pas effectué, l'erreur suivante se produit. --Bien que l'accesseur soit défectueux, le même message d'erreur s'affiche même lorsque la règle ci-dessus n'est pas réellement établie.
org.springframework.beans.NotReadablePropertyException: Invalid property 'contractListForm' of bean class [com.contract.web.ContractListForm]: Bean property 'contractListForm' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
«J'étais confus lorsque j'ai reçu l'objet du référentiel, je l'ai écrit comme suit.
index.html
<tr th:each="obj : ${contractList}">
<td th:text="${obj.anken_kbn}"></td>
<td th:text="${obj.anken_mei}"></td>
La méthode de demande du contrôleur envoyé ici est en fait la même qu'avant, et c'était en fait comme ça
ContractListsController.java
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView index(ModelAndView mav) {
mav.setViewName("index");
Iterable<TMitsumoriHdrEntity> hdrEntityList = hdrDao.findAll();
mav.addObject("contractList", hdrEntityList);
mav.addObject("contractListF", new ContractListForm()); //Instance de formulaire de recherche
return mav;
}
mav.addObject("contractList", hdrEntityList);
<tr th:each="obj : ${contractList}">
--Received in th: each, variable: $ {in instance name} --Pour cette variable
<td th:text="${obj.anken_kbn}"></td>
Résumé
exemple | exempleの取り方 | Comment prendre le terrain |
---|---|---|
Form(POJO)Objet | th:object="${contractListF}" | th:field="*{anken_kbn} |
Objet d'entité | th:each="obj : ${contractList}" | th:text="${obj.anken_kbn}" |
Recommended Posts