пока я писал код для своего маленького веб-сайта для школы, я столкнулся с ошибкой (вероятно, от меня), которая сводит меня с ума ...
Я получил ArrayList с объектами (пользователями), я создал ... в настоящее время 4:
public static ArrayList<Nutzer> users = new ArrayList<Nutzer>();
...
public static void init() {
Nutzer testNutzer1 = new Nutzer("joey", "Gothra", "10", null);
Nutzer testNutzer2 = new Nutzer("Badshah", "Gothra", "10", "Test");
Nutzer testNutzer3 = new Nutzer("Ray", "Gothra", "10", "Baum");
Nutzer testNutzer4 = new Nutzer("Sven", "Gothra", "10", "Niemand");
users.add(testNutzer1);
users.add(testNutzer2);
users.add(testNutzer3);
users.add(testNutzer4);
Затем я создаю идентичную копию этого ArrayList в контроллере, который затем входит в мой DTO в качестве атрибута. Значение:
@RequestMapping(value = { "/edit" }, method = RequestMethod.GET)
public String showEditPage(Model model) {
ArrayList<Nutzer> user = new ArrayList<>(users);
model.addAttribute("formular", new NutzerErstellenDTO(user));
return "Edit";
}
...
DTO
...
public class NutzerErstellenDTO { //DATA TRANSFER OBJECT
@Autowired
private ArrayList<Nutzer> besucher;
public NutzerErstellenDTO(ArrayList<Nutzer> user) {
this.besucher = user;
}
Затем идет в шаблон «Редактировать» и обрабатывается: (извините за длинный код)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>Edit</title>
</head>
<script th:inline="javascript">
function() sendDaten(){
/*<![CDATA[*/
var data = /*[[${formular.besucher}]]*/
/*]]>*/
var url = "http://localhost:8080/edit";
var json = JSON.stringify(data);
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xhr.onload = function () {
var users = JSON.parse(xhr.responseText);
if (xhr.readyState == 4 && xhr.status == "200") {
console.table(users);
} else {
console.error(users);
}
}
xhr.send(json);
}
</script>
<body>
<div class="container">
<div class="row">
<div class="col-md-12"> <!-- AHA WTF -->
<h1>Teilnehmer bearbeiten</h1>
</div>
</div>
<div class="row">
<div class="col-md-6">
<a class="btn btn-info" href="#" th:href="@{/Overview}"> Zurück zur Übersicht </a>
<form action="#" class="form-horizontal" th:action="@{/edit}"
th:object="${formular.besucher}" method="post">
<fieldset>
<span class="pull-right"> <input onclick="sendDaten()" type="submit" id="submitButton" class="btn btn-success" th:value="Speichern">
<input type="reset" id="resetButton" class="btn btn-danger" th:value="Zurücksetzen" />
<button onclick="sendDaten();">Click</button>
</span>
<table class="table">
<thead>
<tr>
<th>Vorname</th>
<th>Nachname</th>
<th>Karten</th>
<th>Wunschsitzpartner</th>
</tr>
</thead>
<tbody>
<tr th:each="u, itemStat : ${formular.besucher}">
<td><input
th:placeholder="Vorname"
th:name="|besucher[${itemStat.index}].vorname|"
th:value="${u.getVorname()}" required /></td>
<td><input
th:placeholder="Nachname"
th:name="|besucher[${itemStat.index}].nachname|"
th:value="${u.getNachname()}" required /></td>
<td><input
th:placeholder="Karten"
th:name="|besucher[${itemStat.index}].karten|"
th:value="${u.getKarten()}" required /></td>
<td><input
th:placeholder="Wunschsitzpartner"
th:name="|besucher[${itemStat.index}].sitzpartner|"
th:value="${u.getSitzpartner()}"/></td>
</tr>
</tbody>
</table>
</fieldset>
</form>
</div>
</div>
</div>
</body>
</html>
все это работает довольно хорошо, когда он возвращается в контроллер с пост-запросом (любые советы о том, как я мог бы превратить его в запрос PUT, высоко ценится (баллы в тесте xD))
@RequestMapping(value = "/edit", method = RequestMethod.POST, consumes = "application/x-www-form-urlencoded")
public String updateTest(NutzerErstellenDTO dto)
List<Nutzer> test = dto.getBesucher();
for (Nutzer nutzer : test) {
System.out.println("test: " + nutzer.getVorname() + nutzer.getNachname() + nutzer.getKarten() + nutzer.getSitzpartner());
}
На данный момент, он уже потерян, как вы можете видеть здесь:
test: nullGothraTestEditWorksFine10*edited
Первое значение всегда "нулевое", и я не знаю почему, потому что все остальное просто отлично работает ...
ЛЮБЫЕ советы или решения для этого? я уже погуглил тонну и ничего не нашел.
РЕДАКТИРОВАТЬ: Это мой класс "Nutzer":
public class Nutzer {
private String vorname;
private String nachname;
private String karten;
private String sitzpartner;
public Nutzer() {
}
public Nutzer(String vorname, String nachname, String karten, String sitzpartner) {
super();
this.vorname = vorname;
this.nachname = nachname;
this.karten = karten;
this.sitzpartner = sitzpartner;
}
public void display() {
System.out.println(vorname + nachname + karten + sitzpartner);
}
public String getVorname() {
return vorname;
}
public void setVorame(String vorname) {
this.vorname = vorname;
}
public String getNachname() {
return nachname;
}
public void setNachname(String nachname) {
this.nachname = nachname;
}
public String getKarten() {
return karten;
}
public void setKarten(String karten) {
this.karten = karten;
}
public String getSitzpartner() {
return sitzpartner;
}
public void setSitzpartner(String sitzpartner) {
this.sitzpartner = sitzpartner;
}