[JAVA] Forme de botte de printemps

Aperçu

Je crée une application Web en utilisant springBoot dans mon entreprise, et je vais vous présenter les astuces liées à Form que j'ai apprises là-bas.

Comment définir la valeur initiale du champ de formulaire

Vous souhaiterez peut-être définir la valeur initiale lors de l'affichage du formulaire en vue. Il existe différentes manières.

Définir dans le constructeur

Le formulaire est généré lorsque le Controller est appelé en définissant @ModelAttribute, et est automatiquement compressé dans le modèle. Donc, si vous définissez un constructeur qui définit la valeur au moment de la génération, la valeur sera définie au moment de l'initialisation

Form.java


@Getter
@Setter
public class Form {
  private String name;
  private int age;

  Form() {
    this.name = "hoge";
    this.age = 18;
  }
}

Cependant, soyez prudent lorsque vous spécifiez un constructeur avec des arguments comme indiqué ci-dessous.

Form.java


@Getter
@Setter
public class Form {
  private String name;
  private int age;

  Form(String name, int age) {
    this.name = name;
    this.age = age;
  }
}

Avec cela seul, lors du POST de la valeur du formulaire

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: No primary or default constructor found for class com.example.demo.ParsonForm] with root cause

J'obtiens une erreur comme celle-ci. Cela se produit car il n'y a pas de constructeur sans arguments. Ainsi, lorsque vous utilisez un constructeur avec des arguments, écrivez le constructeur sans arguments ainsi que ci-dessous.

Form.java


@Getter
@Setter
public class Form {
  private String name;
  private int age;

  Form(String name, int age) {
    this.name = name;
    this.age = age;
  }

  Form() {
  }
}

Défini par le poseur dans le contrôleur

Il peut également être spécifié par le poseur dans le contrôleur. Cependant, dans ce cas, n'oubliez pas de transmettre le formulaire avec la valeur ajoutée au modèle.

indexController.java


@RequestMapping("/new")
public String index(Form form) {
  form.setName("hoge");
  form.setAge(18);
  model.addAttribute("form",form);
  return "index";
}

Set par thymeleaf

Vous pouvez également ajouter une valeur avec th: value en vue. Cependant, dans ce cas, les précautions suivantes sont nécessaires.

index.html


<form method="post" action="/" th:object="${form}">
  <input type="text" name="name" th:value="*{name == null ? 'hoge' : name">
  <input type="text" name="age" th:value="*{age == null ? 18 : age}">
</form>

Gérer les objets imbriqués dans Form

Spring Form est pratique car vous pouvez facilement définir la validation avec des annotations. Cependant, si vous souhaitez travailler avec des structures de données plus complexes, vous pouvez utiliser des objets imbriqués.

Par exemple, le formulaire Parson suivant conserve plusieurs itemNames et itemSizes. ..

ParsonForm


@Getter
@Setter
public class ParsonForm {

  private String name;

  private itemName1;
  
  private itemName2;

  private itemSize1;

  private itemSize2;
}

Vous pouvez également écrire, mais créer un modèle d'élément pour ce qui suit,

Item.java


@Getter
@Setter
public class Item {

  private String name;

  private int size;

}

Il sera plus propre de l'écrire comme Collection .

ParsonForm


@Getter
@Setter
public class ParsonForm {

  private String name;

  private Collection<Item> items;

}

Validation des objets imbriqués

Si vous souhaitez valider davantage les éléments de l'objet imbriqué, Ajoutez simplement l'annotation @Valid dans les éléments ParsonForm La validation dans Item.java fonctionnera.

Parson


@Getter
@Setter
public class ParsonForm {

  private String name;

  @Valid
  private Collection<Item> items;

}

Item.java


@Getter
@Setter
public class Item {
  
  @NotBlank
  private String name;

  @Max(100)
  @Min(1)
  private int size;

}

Remarques sur l'expansion des objets imbriqués

Assurez-vous d'ajouter le tableau [] pour le spécifier dans le champ th:.

form.html


  <form class="parsonForm" th:action="@{/}" th:method="post" th:object="${parsonForm}">
    <input type="text" th:field="*{name}">
    <input type="text" th:field="*{items[0].name}">
    <input type="text" th:field="*{items[0].size}">
    <input type="text" th:field="*{items[1].name}">
    <input type="text" th:field="*{items[1].size}">
    <input type="submit">
  </form>

référence

https://qiita.com/yo1000/items/b58a1ae8b3e51fdda479 https://area-b.com/blog/2015/02/04/2009/

Recommended Posts

Forme de botte de printemps
Spring Boot Rappelez-vous
gae + botte à ressort
[Introduction à Spring Boot] Vérification de la validation du formulaire
Test de validation de classe de formulaire avec Spring Boot
Fiche d'apprentissage SPRING BOOT 01
Botte de printemps + Heroku Postgres
taglib printanier: notes de forme
Rédaction de mémo de démarrage de printemps (1)
Première botte à ressort (DI)
Fiche d'apprentissage SPRING BOOT 02
Gestion des exceptions Spring Boot
Mappage du servlet Spring Boot
Environnement de développement-développement Spring Boot-
Procédure d'apprentissage Spring Boot
Apprentissage de Spring Boot [Début]
Rédaction de mémos de démarrage de printemps (2)
Résumé du document Spring Boot 2.2
Disponibilité de l'application Spring Boot 2.3
Tutoriels Spring Boot Sujets
Télécharger avec Spring Boot
[Spring Boot] Construction de l'environnement (macOS)
Essayez Spring Boot de 0 à 100.
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Spring Boot sur Microsoft Azure
Implémenter GraphQL avec Spring Boot
Calendrier des tâches du didacticiel Spring Boot
Spring 5 et Spring Boot 2 Procédure de préparation pratique
Démarrez avec Spring Boot
Multi-projets Spring Boot 2 avec Gradle
[Spring Boot] Création d'applications Web
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Paramètres d'échange à chaud Spring Boot
Introduction à Spring Boot ① ~ DI ~
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Introduction à Spring Boot ② ~ AOP ~
[Introduction à Spring Boot] Soumettez un formulaire à l'aide de thymeleaf
Application Java CICS-Run - (4) Application Spring Boot
Spring Boot + Springfox springfox-boot-starter 3.0.0 Utilisation
Conseils relatifs à Spring Boot DB
Hello World avec Spring Boot
[Spring Boot] Recette de processus de pagination facile
Utiliser Spring JDBC avec Spring Boot
Construction de l'environnement Docker × Spring Boot
Changements majeurs dans Spring Boot 1.5
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
NoHttpResponseException dans Spring Boot + WireMock
[Spring Boot] Envoyer un e-mail
Paramètres liés aux performances de Spring Boot
Introduction à Spring Boot, partie 1
Priorité de réglage externe Spring Boot
Essayez d'utiliser Spring Boot Security
[Java] [Spring] Spring Boot 1.4-> 1.2 Note de rétrogradation
Essayez Spring Boot sur Mac
Créer un micro service avec Spring Boot
Pool de connexion de base de données Spring Boot