Bonjour,

J'aurais besoin de votre aide. Je suis en train de m'essayer à Struts2. J'ai déjà eu un mal de chien à trouver comment lancer une action au chargement d'une page. Après avoir enfin trouvé, je me suis mis à utiliser les validators pour mon formulaire et plus rien ne fonctionne. Alors que je devrais avoir une liste d'élément avec en dessous un formulaire. Je n'ai plus que le formulaire avec une jolie exception qui me dit que l'action listAll ne peut être exécutée parce que je dois lui ajouter un result de type input. Hélas, je ne comprends pas pourquoi, alors que dans cette page il n'y a aucun formulaire à valider.

J'ai déjà cherché un peu partout sur la toile mais pas moyen de trouver une solution. Vous êtes mon dernier espoir

Voici quelqu'uns de mes fichiers:
struts.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<constant name="struts.devMode" value="true" />
	<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
 
	<package name="defaut" extends="struts-default" namespace="/">
		<action name="default">
			<result>/index.jsp</result>
		</action>
	</package>
 
	<package name="recipe" extends="struts-default" namespace="/recipe">
		<action name="listAll" class="struts.action.RecipeAction" method="listAll">
			<result name="success">/recipe_list.jsp</result>
		</action>
		<action name="delete" class="struts.action.RecipeAction" method="delete">
			<result name="success">/index.jsp</result>
		</action>
		<action name="get" class="struts.action.RecipeAction" method="get">
			<result name="success">/index.jsp</result>
		</action>
		<action name="edit" class="struts.action.RecipeAction" method="edit">
			<result name="input">/index.jsp</result> <!-- What we do if the user's input in the form is not valid  -->
			<result name="success">/index.jsp</result>
			<result name="error">/index.jsp</result>
		</action>
	</package>
</struts>
recipe_list.jsp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<ul>
	<s:iterator value="recipes" var="recipe">
		<s:url action="delete" namespace="/recipe" var="del">
			<s:param name="id"><s:property value="id" /></s:param>
		</s:url>
		<s:url action="get" namespace="/recipe" var="edit">
			<s:param name="id"><s:property value="id" /></s:param>
		</s:url>
		<li><a href="<s:property value='#del' />">Delete</a> <a href="<s:property value='#edit' />">Edit</a> <s:property value="title" /> | <s:property value="peopleCount" />
	</s:iterator>
</ul>
index.jsp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Welcome</title>
</head>
<body>
<h1>Welcome</h1>
<s:action name="listAll" namespace="/recipe" executeResult="true" />
<s:form action="edit" namespace="/recipe">
	<s:hidden name="recipe.id" />
	<s:textfield key="recipe.title" />
	<s:textfield key="recipe.peopleCount" />
	<s:textarea key="recipe.content" rows="10" cols="50" />
	<s:submit value="%{getText('recipe.edit')}" />
</s:form>
</body>
</html>
RecipeAction-validation.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
	<field name="recipe.title">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message>Required</message>
		</field-validator>
	</field>
	<field name="recipe.peopleCount">
		<field-validator type="required">
			<message>Required</message>
		</field-validator>
	</field>
</validators>
RecipeAction.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class RecipeAction extends ActionSupport {
	private static final long serialVersionUID = 1L;
	private PersistenceFacade persistence = PersistenceFacade.getInstance();
	private List<?> recipes = new ArrayList<Recipe>();
	private Recipe recipe = new Recipe();
	private int id;
 
	public String listAll() throws Exception {
		recipes = persistence.findAll(Recipe.class);
		return SUCCESS;
	}
 
	public String delete() throws Exception {
		persistence.delete(persistence.get(Recipe.class, id));
		return SUCCESS;
	}
 
	public String get() throws Exception {
		recipe = (Recipe) persistence.get(Recipe.class, id);
		return SUCCESS;
	}
 
	public String edit() throws Exception {
		persistence.put(recipe);
		return SUCCESS;
	}
 
	public List<?> getRecipes() {
		return recipes;
	}
 
	public void setRecipes(List<?> recipes) {
		this.recipes = recipes;
	}
 
	public Recipe getRecipe() {
		return recipe;
	}
 
	public void setRecipe(Recipe recipe) {
		this.recipe = recipe;
	}
 
	public int getId() {
		return id;
	}
 
	public void setId(int id) {
		this.id = id;
	}
}
Merci