Ich mache eine Webanwendung mit springBoot in meinem Unternehmen und werde die Tipps zu Form vorstellen, die ich dort gelernt habe.
Möglicherweise möchten Sie einen Anfangswert festlegen, wenn Sie ein Formular in der Ansicht anzeigen. Es gibt verschiedene Möglichkeiten.
Das Formular wird generiert, wenn der Controller durch Festlegen von @ModelAttribute aufgerufen wird, und wird automatisch in das Modell gepackt. Wenn Sie also einen Konstruktor festlegen, der den Wert zum Zeitpunkt der Generierung festlegt, wird der Wert zum Zeitpunkt der Initialisierung festgelegt
Form.java
@Getter
@Setter
public class Form {
private String name;
private int age;
Form() {
this.name = "hoge";
this.age = 18;
}
}
Seien Sie jedoch vorsichtig, wenn Sie einen Konstruktor mit den unten gezeigten Argumenten angeben.
Form.java
@Getter
@Setter
public class Form {
private String name;
private int age;
Form(String name, int age) {
this.name = name;
this.age = age;
}
}
Dies allein beim POSTEN des Wertes des Formulars
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
Ich bekomme so einen Fehler. Dies geschieht, weil es keinen Konstruktor ohne Argumente gibt. Wenn Sie also einen Konstruktor mit Argumenten verwenden, schreiben Sie den Konstruktor ohne Argumente sowie unten.
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() {
}
}
Sie kann auch vom Setter im Controller angegeben werden. Vergessen Sie in diesem Fall jedoch nicht, das Formular mit dem Mehrwert an das Modell zu übergeben.
indexController.java
@RequestMapping("/new")
public String index(Form form) {
form.setName("hoge");
form.setAge(18);
model.addAttribute("form",form);
return "index";
}
Sie können auch einen Wert mit dem Wert th: in der Ansicht hinzufügen. In diesem Fall sind jedoch die folgenden Vorsichtsmaßnahmen erforderlich.
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>
Spring Form ist praktisch, da Sie die Validierung einfach mit Anmerkungen festlegen können. Wenn Sie jedoch mit komplexeren Datenstrukturen arbeiten möchten, können Sie verschachtelte Objekte verwenden.
Das folgende Parson-Formular enthält beispielsweise mehrere itemNames und itemSizes. ..
ParsonForm
@Getter
@Setter
public class ParsonForm {
private String name;
private itemName1;
private itemName2;
private itemSize1;
private itemSize2;
}
Sie können auch schreiben, aber ein Artikelmodell für Folgendes erstellen:
Item.java
@Getter
@Setter
public class Item {
private String name;
private int size;
}
Es wird sauberer sein, es als Sammlung
ParsonForm
@Getter
@Setter
public class ParsonForm {
private String name;
private Collection<Item> items;
}
Wenn Sie die Elemente im verschachtelten Objekt weiter validieren möchten, Fügen Sie einfach die Annotation @Valid in die ParsonForm-Elemente ein Die Validierung in Item.java funktioniert.
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;
}
Stellen Sie sicher, dass Sie das Array [] hinzufügen, um es im Feld th: anzugeben.
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>
https://qiita.com/yo1000/items/b58a1ae8b3e51fdda479 https://area-b.com/blog/2015/02/04/2009/
Recommended Posts