Eine der Bildschirmanforderungen, die beim Erstellen eines Systems mit einer Webanwendung ziemlich ärgerlich ist, heißt ** tabellarische Eingabe **.
Das sieht ziemlich einfach aus ** es war an erster Stelle mühsam zu implementieren **, aber tatsächlich war es möglich, seit Struts 2 veröffentlicht wurde.
Es gab jedoch einige Implementierungen, die je nach Version aufgrund verschiedener Faktoren wie Sicherheitskorrekturen und potenzieller Fehler nicht mehr funktionierten. Daher werde ich sie hier vorstellen.
Struts2 speichert Anforderungsparameter in Mitgliedsvariablen der Action-Klasse. Beim Speichern in einer Mitgliedsvariablen wird automatisch versucht, in den Typ (Klasse) der Mitgliedsvariablen der Aktionsklasse zu konvertieren. Folgende Typen (Klassen) werden automatisch konvertiert.
… Mit anderen Worten, die meisten Dinge werden automatisch konvertiert. Da die Felder der Klasse automatisch durchsucht und die Werte gespeichert werden, bereiten Sie beispielsweise die folgenden Felder in der Action-Klasse vor.
private List<SampleProduct> products;
public void setProducts(List<SampleProduct> products) {
this.products = products ;
}
public List<String> getProducts () {
return products;
}
Auf diese Weise können Sie sowohl die Antwort auf den Bildschirm als auch die Anforderung vom Bildschirm in einem Array verarbeiten, und Sie können auch die Klasse behandeln, deren Inhalt unabhängig vorbereitet wird.
<table class="table table-bordered">
<thead>
<th>id</th>
<th>Produktname</th>
</thead>
<tbody>
<tr th:each="product,status : ${products}">
<td>
<input type="text" value="X-45" name="id" class="form-control" th:name="'products[' + ${status.getIndex()} + '].id'" th:value="${product.getId()}" />
</td>
<td>
<input type="text" value="X-45" name="name" class="form-control" th:name="'products[' + ${status.getIndex()} + '].name'" th:value="${product.getName()}" />
</td>
</tr>
</tbody>
</table>
Sie können Liste usw. wiederholt ausgeben, indem Sie "
Im obigen Beispiel lautet der tatsächliche Ausgabe-HTML wie folgt.
<table class="table table-bordered">
<thead>
<th>id</th>
<th>Produktname</th>
</thead>
<tbody>
<tr>
<td>
<input type="text" class="form-control" name="products[0].id" value="0. ID-Wert" />
</td>
<td>
<input type="text" class="form-control" name="products[0].name" value="0. Namenswert" />
</td>
</tr>
<tr>
<td>
<input type="text" class="form-control" name="products[1].id" value="1. ID-Wert" />
</td>
<td>
<input type="text" class="form-control" name="products[1].name" value="1. Namenswert" />
</td>
</tr>
........Danach wiederholen.......
</tbody>
</table>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<body>
<s:form action="update" theme="simple">
<s:iterator value="products" var="product" status="status">
<s:textfield name="products[%{#status.index}].id"></s:textfield>
<s:textfield name="prodocts[%{#status.index}].name"></s:textfield>
</s:iterator>
<s:submit />
</s:form>
</body>
</html>