[JAVA] Entrée au format tabulaire avec Struts2.5.x (compatible avec JSP et Thymeleaf)

Struts2 et entrée tabulaire

L'une des requêtes d'écran qui est assez ennuyeuse lors de la création d'un système avec une application Web est ce qu'on appelle ** entrée tabulaire **.

Cela semble assez facile ** c'était un problème à mettre en œuvre au départ **, mais en fait, cela a été possible depuis la sortie de Struts 2.

Cependant, à partir de ce moment, certaines implémentations ont cessé de fonctionner en fonction de la version en raison de divers facteurs tels que les correctifs de sécurité et les bogues potentiels, je vais donc les présenter ici.

Méthode d'entrée tabulaire (requête)

Struts2 stocke les paramètres de requête dans les variables membres de la classe Action. Lors du stockage dans une variable membre, il essaie automatiquement de se convertir au type (classe) de la variable membre de la classe Action. Les types (classes) qui sont automatiquement convertis sont les suivants.

… En d'autres termes, la plupart des éléments sont convertis automatiquement. De plus, étant donné que les champs de la classe sont automatiquement recherchés et que les valeurs sont stockées, par exemple, préparez les champs suivants dans la classe Action.

private List<SampleProduct> products;

public void setProducts(List<SampleProduct> products) {
  this.products = products ;
}

public List<String> getProducts () {
  return products;
}

En faisant cela, vous pouvez gérer à la fois la réponse à l'écran et la demande de l'écran dans un tableau, et vous pouvez également gérer la classe dont le contenu est préparé indépendamment.

Exemple de formulaire de saisie utilisant Thymeleaf

<table class="table table-bordered">
	<thead>
		<th>id</th>
		<th>nom du produit</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>

Vous pouvez reproduire la liste de façon répétée, etc. en utilisant <tr th: each>. Contrairement à JSTL, etc., l'objet qui gère le nombre de répétitions et le numéro de ligne courant peut être désigné par le nom déclaré sur le côté droit séparé par des virgules. C'est facile.

Dans l'exemple ci-dessus, le HTML de sortie réel est le suivant.

<table class="table table-bordered">
	<thead>
		<th>id</th>
		<th>nom du produit</th>
	</thead>
	<tbody>
		<tr>
			<td>
				<input type="text" class="form-control" name="products[0].id" value="0ème valeur d'identifiant" />
			</td>
			<td>
				<input type="text" class="form-control" name="products[0].name"  value="0ème valeur du nom" />
			</td>
		</tr>
		<tr>
			<td>
				<input type="text" class="form-control" name="products[1].id" value="1ère valeur d'identifiant" />
			</td>
			<td>
				<input type="text" class="form-control" name="products[1].name"  value="Valeur du 1er nom" />
			</td>
		</tr>
........Après cela, répétez.......
	</tbody>
</table>

Exemple de formulaire d'entrée JSP

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

Entrée au format tabulaire avec Struts2.5.x (compatible avec JSP et Thymeleaf)
Dessiner un écran avec Thymeleaf dans SpringBoot
Top 75+ questions et réponses d'entrevue JSP en 2020