Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] SOS Strust 2

Estas en el tema de SOS Strust 2 en el foro de Java en Foros del Web. Hola, soy novato en tecnologías web (vengo del COBOL y me estoy reciclando a base de chocazos) y llevo unos días atascado con el Struts2. ...
  #1 (permalink)  
Antiguo 06/02/2013, 02:44
 
Fecha de Ingreso: febrero-2013
Ubicación: Utrera
Mensajes: 9
Antigüedad: 11 años, 3 meses
Puntos: 0
Pregunta SOS Strust 2

Hola, soy novato en tecnologías web (vengo del COBOL y me estoy reciclando a base de chocazos) y llevo unos días atascado con el Struts2. A ver si algún alma caritativa me puede echar una mano. Estoy seguro que el problema es cualquier tontería...

Mi objetivo es recuperar de un select el valor apuntado por el listkey. Si bien en el action recupero sin problemas los valores de los textfield, del list no tengo visibilidad alguna.

Código del jsp:
[..]
<s:form action="acceso">
<s:select label="Empresa" name="selectEmpresa"
list='listaEmpresas' listValue="nombreEmpresa" listKey="idEmpresa"/>
<s:textfield label="Usuario" name="usuario" />
<s:password label="Password" name="password" />
<s:submit value="Aceptar" />
</s:form>
[..]

Código del Action:
public class LoginAction extends ActionSupport {

private String usuario;
private String password;
private int idEmpresa;
[..]
seter y geter....
[..]
public String execute() throws Exception
{

LoginAction acUsuario = new LoginAction();
Usuario hbUsuario = new Usuario();

acUsuario.setUsuario(usuario);
acUsuario.setPassword(password);
acUsuario.setEmpresa(idEmpresa);

[..] En la línea de código anterior el idEmpresa está a null, sin embargo usuario y password sí están informados.

¿cual es el problema? mil gracias.
  #2 (permalink)  
Antiguo 06/02/2013, 03:08
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 2 meses
Puntos: 78
Respuesta: SOS Strust 2

En el .action debes cambiar:

private int idEmpresa;
por
private int selectEmpresa;

Establece el setter.

Los nombres que pongas en el atributo "name" del HTML, deben coincidir con el atributo que esperas recibir en el .action.
  #3 (permalink)  
Antiguo 06/02/2013, 03:18
 
Fecha de Ingreso: febrero-2013
Ubicación: Utrera
Mensajes: 9
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: SOS Strust 2

Tampoco me va.

public class LoginAction extends ActionSupport{

private String usuario;
private String password;
private int selectEmpresa;
[..]

public String execute() throws Exception
{

LoginAction acUsuario = new LoginAction();
Usuario hbUsuario = new Usuario();

acUsuario.setUsuario(usuario);
acUsuario.setPassword(password);
acUsuario.setEmpresa(selectEmpresa);

selectEmpresa contiene el valor 0. el html generado para el select es:

><select name="selectEmpresa" id="acceso_selectEmpresa">
<option value="1">Empresa1</option>
<option value="2">Empresa2</option>
<option value="3">Empresa3</option>
<option value="4">Empresa4</option>
<option value="5">Empresa5</option>

¿puede ser por el tipo de datos?, en el html generado es una cadena sin embargo en el action es entero. (igual he dicho una tontería...)
  #4 (permalink)  
Antiguo 06/02/2013, 03:28
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 2 meses
Puntos: 78
Respuesta: SOS Strust 2

Te falta el setter. Antes de meter el dato en el objeto acUsuario, debes recogerlo con un setter.

Antes del método execute() pon esto:

Código Java:
Ver original
  1. public void setSelectEmpresa(int selectEmpresa) {
  2.         this.selectEmpresa = selectEmpresa;
  3.     }
  #5 (permalink)  
Antiguo 06/02/2013, 03:55
 
Fecha de Ingreso: febrero-2013
Ubicación: Utrera
Mensajes: 9
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: SOS Strust 2

OLE!

el setter lo tenía pero se llamaba setEmpresa, como se invoca explicitamente no sabía que el nombre debía coincidir.

Muchísimas gracias!!

Etiquetas: select, struts2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:58.