[JAVA] Eingabe in Tabellenform mit Struts2.5.x (kompatibel mit JSP und Thymeleaf)

Struts2 und tabellarische Eingabe

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.

Tabellarische Eingabemethode (Anforderungsmethode)

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.

Beispiel für ein Eingabeformular mit Thymeleaf

<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 "" verwenden. Im Gegensatz zu JSTL usw. kann auf das Objekt, das die Anzahl der Wiederholungen und die aktuelle Zeilennummer verwaltet, der durch Kommas getrennte Name auf der rechten Seite bezogen werden. Es ist einfach.

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>

Beispiel für ein JSP-Eingabeformular

<%@ 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>

Recommended Posts

Eingabe in Tabellenform mit Struts2.5.x (kompatibel mit JSP und Thymeleaf)
Zeichnen Sie den Bildschirm mit Thymeleaf in SpringBoot
Top 75+ Fragen und Antworten zu JSP-Interviews im Jahr 2020