Der Versuch, die Variable bei der Formularübergabe an die Ergebnisseite zu übergeben, gibt jedoch jedes Mal null zurück. Egal wie viele Variationen ich ausprobiert habe.Platzhalter in Thymeleaf-Vorlage kann nicht in Null gefunden werden
So Karte Ich erhalte und Post für login.html:
@GetMapping("/login")
public String greetingForm(Model model) {
model.addAttribute("User2", new User());
return "login";
}
@PostMapping("/login")
public String greetingSubmit(@ModelAttribute User regUser) {
//userRepository.save(regUser);
//String teststr = regUser.getName();
//System.out.println(teststr);
return "result";
}
tatsächlich sieht login.html wie folgt aus:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Getting Started: Handling Form Submission</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Form</h1>
<form action="#" th:action="@{/demo/login}" th:object="${User2}" method="post">
<p>Username: <input type="text" th:field="*{name}" /></p>
<p>Password: <input type="text" th:field="*{password}" /></p>
<p>Balance: <input type="text" th:field="*{balance}" /></p>
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
</body>
</html>
Teil der User.java Datei:
@Entity // This tells Hibernate to make a table out of this class
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
private String password;
private int balance;
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
und das Ergebnis.html ist:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Getting Started: Handling Form Submission</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Result</h1>
<p th:text="'username: ' + ${User.name}" />
<p th:text="'password: ' + ${regUser != null ? regUser.password : 'NOT FOUND'}" />
<p th:text="'balance: ' + ${model != null ? regUser.balance : 'NOT FOUND'}" />
<a href="/demo/login">Submit another user?</a>
</body>
</html>
Es hält immer wieder eine Null-Fehler auf dieser Linie zu werfen:
<p th:text="'username: ' + ${User.name}" />
speziell ${User.name}
, die wie
org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'name' cannot be found on null
So sieht Ich habe alles versucht habe ich kann denken von,
${User2.name}
${User}
${User2}
${regUser.name}
${teststr}
${#User.name}
etc ....
Es ist sehr seltsam, wenn ich System.out.println(regUser.getName());
Kommentar- werden es den Namen des Benutzers ganz gut drucken, aber nicht die Variable übergeben. Ist es mein Platzhalter oder kann es nicht als th:text
übergeben werden, weil es ein User
Objekt ist? Bitte helfen Sie mir, ich bin sehr verwirrt!
Edit: Tutorial folgte ich (https://spring.io/guides/gs/handling-form-submission/) Wenn Sie das Tutorial kopieren, funktioniert es gut, aber es gibt nur eine Zeichenfolge. Obwohl User.name eine String-Variable wäre ...