Ayuda con Struts

antonioperez84
21 de Abril del 2008
Hola a todos.

Estoy empezando una aplicación con Struts, con Tomcat 5.5 y Eclipse 3.1.2. Comienzo haciendo en una JSP una formulario (login), con la propiedad action = "login.do", con dos cajas, usuario y clave, y un boton "Aceptar". Tengo un Action en el struts-config el cual, cuando pulso el boton Aceptar, se va a la clase action, en este caso LoginAction.java, el cual redirecciono al forward "success" del struts-config, que va a exito.jsp.

El caso es que se me va a la ruta http://localhost:8080/Prueba/login.do y se me queda una pagina totalmente en blanco, cuando debería de ir a exito.jsp

He probado a cambiar mil cosas, el web.xml está correcto.

En breve meteré el código, porque ahora no lo tengo aquí, pero si me podéis adelantar algo, lo agradecería.

Muchas gracias

Saludos

antonioperez84
21 de Abril del 2008
Este es mi struts-config:
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>
<form-beans>
<form-bean name="formulario"
type="FormLogin.FormularioLogin">
</form-bean>
</form-beans>
<action-mappings>
<action path="/login"
scope="request"
name="formulario"
validate="false"
input="/index.jsp"
unknown="false"
type="ActionLogin.Login">
<forward name="exito"
path="/exito/exito.jsp"
redirect="true"
contextRelative="true">
</forward>
</action>
</action-mappings>
</struts-config>


Este es mi web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/Prueba/*</url-pattern>
</servlet-mapping>
</web-app>

Este es el index.jsp, donde esta el formulario:

<html>
<body>
<h1>Bienvenido</h1>
<form name = "formulario" method = "post" action = "login">
usuario: <input type = "text" name = "usuario">
clave: <input type = "password" name = "clave">
<input type = "submit" name = "aceptar" value = "Aceptar">
</form>
</body>
</html>

Esta es la clase action:

package ActionLogin;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import FormLogin.FormularioLogin;

public class Login extends Action
{
public ActionForward doExecute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
{
/*String accion = "";

FormularioLogin formu = new FormularioLogin();

if (formu.getUsuario().equals("usuario") && formu.getClave().equals("hola"))
{
accion = "exito";
}
else
{
accion = "fallo";
}*/


return mapping.findForward("exito");
}
}

Esta la clase ActionForm:

package FormLogin;

import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

import javax.servlet.http.*;

public class FormularioLogin extends ActionForm
{
private String usuario = null;
private String clave = null;

public void setUsuario(String usuario)
{
this.usuario = usuario;
}

public String getUsuario()
{
return (this.usuario);
}

public void setClave(String clave)
{
this.clave = clave;
}

public String getClave()
{
return (this.clave);
}
}


Muchas gracias, espero respuestas por favor.

Ninguno
21 de Abril del 2008
Creo que el fallo viene en que tu, dentro del ActionLogin haces esto:
FormularioLogin formu = new FormularioLogin();
pero asi no recoges lo que mandas desde index.jsp.
Tendrias que hacer esto:
FormularioLogin formu = form;
de esa forma recoges el ActionForm (es decir, la copia virtual del formulario).
Ademas, no sé si se podrá hacer asi, pero lo cierto es que en el web.xml tienes escrito:
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/Prueba/*</url-pattern>
</servlet-mapping>
cuando debería poner:
<url-pattern>/Prueba/*.do</url-pattern>
Porque lo que queremos es que el servlet redirija cualquier action y dentro del mappings de los action ya es donde le indicamos a donde mandarle en funcion de si hemos tenido exito en nuestras instrucciones del action o no por medio del atributo forward del action correspondiente.