[Struts 2][INPUT result] URL incohérant
Bonjour,
Ceci est mon premier "post". J'espère respecter les directives. Ne vous gênez pas pour me dire si je n'ai pas fait les choses selon les règles de l'art.
Je débute en Struts 2 et j'ai fait plusieurs tutoriels. J'essaye de bâtir une petite application web qui intègre ce que j'ai appris. Cette application est multilingue. J'utilise donc un appel à la méthode input() dès que j'arrive sur une page pour que l'action puisse afficher le texte dans la bonne langue.
Lorsque je démarre mon application, index.jsp est chargé et l'appel à l'action LogInput est correctement exécuté. Le résultat est valide, le paramétrage de request_locale est correctement lu et je vois le texte contenu dans mon fichier LoginAction_fr.properties.
À ce moment là, le URL visible dans le navigateur est :
Lorsque je clique sur mon bouton "Valider" sans remplir les champs "username" et "password", je m'attends à un retour à la même page avec un message d'erreur généré par addFieldError() provenant de la méthode validate();
Ô! surprise, je me retrouve avec une page blanche, sans les images normalement contenues dans login.jsp et seulement un lien d'image cassé, mes deux champs, mon bouton de validation et le message d'erreur généré par addFieldError(). le fait de voir mon texte localisé et mon message d'erreur me permet de présumer que mon action s'est bien exécutée.
À ce moment là, le URL visible dans le navigateur est :
Je clique à nouveau sur le bouton valider en m'attendant au même résultat mais ce coup là, ça marche.
Le URL deviens :
Pourquoi ça ne marche pas la première fois mais que ça marche les fois suivantes ? J'oublie de déclarer un "namespace" ?
Je continue à chercher...
Voici tout le code pertinent pour répondre à ma question.
J'utilise Tomcat 7.0 et le jdk1.6.0_21
Je remercie ceux ou celles qui vont me dépanner.
Contenu de webxml :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>3ZWeb</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app> |
Contenu de struts.xml
Code:
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
|
<?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" />
<package name="3ZWeb" extends="struts-default">
<action name="index">
<result>/index.jsp</result>
</action>
<action name="LogInput" class="org.fgr.threezweb.login.action.LoginAction" method="input">
<result name="input">/login.jsp</result>
</action>
<action name="Logon" class="org.fgr.threezweb.login.action.LoginAction" method="execute">
<result name="success">/dummy.jsp</result>
<result name="input">/login.jsp</result>
</action>
</package>
</struts> |
Contenu de index.jsp
Code:
1 2 3 4 5
|
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:action namespace="/3ZWeb" name="LogInput" executeResult="true"></s:action> |
Code:
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
|
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ 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=ISO-8859-1">
<title>3Z Brothers</title>
<link href="css/global.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="mainShell" align="center">
<div id="headerBGContainer">
<div id="headerContainer">
<div id="logoContainer">
<a href="/3ZWeb"><img class="pngfix" src="images/gateLogo.png" height="33" width="217" border="0"
alt="EVE Online | EVE Gate" /></a>
</div>
</div>
</div>
<div id="logOn">
<s:form method="post" action="Logon">
<s:textfield key="logInfo.username" />
<s:password key="logInfo.password" />
<s:submit key="loginSubmit" />
</s:form>
</div>
</div>
</body>
</html> |
Contenu de LoginAction.java
Code:
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
|
package org.fgr.threezweb.login.action;
import java.util.Map;
import org.fgr.threezweb.database.UserService;
import org.fgr.threezweb.login.model.LoginModel;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private LoginModel logInfo;
public String execute() throws Exception {
try {
UserService us = new UserService();
if(us.ValidateUser(logInfo.getUsername(), logInfo.getPassword())) {
Map<String, Object> session = ActionContext.getContext().getSession();
session.put("logged-in","true");
return SUCCESS;
} else {
return INPUT;
}
} catch(Exception e) {
return ERROR;
}
}
public void validate() {
if(logInfo.getUsername().length() == 0) {
addFieldError("logInfo.username", "baaaad");
}
}
public void setLogInfo(LoginModel logInfo) {
this.logInfo = logInfo;
}
public LoginModel getLogInfo() {
return logInfo;
}
} |