EJB (Enterprise Java Beans) - pasar un sólo parámetro mediante <html:link>

 
Vista:

pasar un sólo parámetro mediante <html:link>

Publicado por Eva (10 intervenciones) el 12/02/2007 13:15:45
Hola!

Tengo un jsp desde el cual el usurio pinchando sobre un id le muestra el detalle de ese id, por tanto tengo que pasar como parámetro dicho id mediante el link. Lo hago de la siguiente manera:

<html:link action="/listaDescripciones" paramName="incidencia" paramId="id_incidencia" paramProperty="id_incidencia">
<bean:write name="incidencia" property="id_incidencia"/>
</html:link>

y en listaDescripciones pongo:

HttpSession session=request.getSession();
id_incidencia= (String)session.getAttribute("id_incidencia");

para pasarse lo a mi query, pero siempre me llega null.

Si me pudierais hechar una mano estaría muy agradecida.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:pasar un sólo parámetro mediante <html:link&

Publicado por Gonzalo (7 intervenciones) el 12/02/2007 17:41:34
Esto:

HttpSession session=request.getSession();
id_incidencia= (String)session.getAttribute("id_incidencia");

Busca un *atributo* en la *sesión*. Tú lo qu eestás recibiendo en la acción es un *parámetro* en la *petición*.

Es decir, lo que recibes estará en request.getParameter("id_incidencia")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar un sólo parámetro mediante <html:link&

Publicado por Eva (10 intervenciones) el 23/02/2007 14:13:04
Muchas gracias ya consegui corregirlo, pero no he podido entrar en la web.

Pero tengo un nuevo problema, he creado un formulario, en el cual tengo un text area y el problema consiste en que a la hora de guarda el valor del textarea siempre llega nul, claro yo lo estoy recogiendo del formulario de la siguiente manera:

anadirDescForm = (anadirDescripcionForm)form;
String texto= anadirDescForm.getTexto();

Al llegar el valor null entiendo que no se recoge de la misma manera el valor de un <html:text> que de un <html:textarea> si me puedes echar una mano lo agradeceria.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar un sólo parámetro mediante <html:link&

Publicado por Gonzalo (7 intervenciones) el 24/02/2007 01:06:31
No creo. El valor se recoge de un textarea igual que de un text.

El problema debe de estar en otra parte del código. En el anadirDescripcionForm o en el formulario del JSP...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar un sólo parámetro mediante <html:link&

Publicado por Eva (10 intervenciones) el 26/02/2007 09:16:53
Hola Gonzalo en el JSP pongo lo siguiente:

<html:textarea property="texto" rows="15" cols="50"/>

y en el formulario:

anadirDescripcionForm:

/*Descripcion*/
private String id_descripcion;
private String id_usuario;
private String usuario;
private String texto; //del textarea
private String id_estado;//
private String descripcion;/*descripcion del estado*/

guardarDescripcionAction:

/*Obtenemos los datos necesarios para el formulario*/
anadirDescForm = (anadirDescripcionForm)form;
String texto= anadirDescForm.getTexto();

A ver si con esto encontramos el erro.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar un sólo parámetro mediante <html:link&

Publicado por Gonzalo (7 intervenciones) el 26/02/2007 19:51:26
Y en el anadirDescripcionForm, supongo que el setTexto lo tienes como
public void setTexto(String in) {
//... this.texto = in; o algo similar.
}
Y que tienes asociado ese tipo de form con la guardarDescripcionAction y todas esas cosas, no?

No sé, comprueba que el HTML que se está generando sea correcto (no haya por ahí etiquetas abiertas u otro campo con nombre texto o nada así sospechoso).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar un sólo parámetro mediante <html:link&

Publicado por Eva (10 intervenciones) el 27/02/2007 09:17:04
Ya he resulto mi problema, el error estaba en el jsp como me dijiste y es que tenia dos formularios diferentes y por eso no podia recoger los valores del formulario. Muchas gracias.

Pero te cuento mi nuevo problema, en un formulario tengo dos combos con los datos que muestran sacados de bb.dd. El problema es que no se como recoger el valor que el usuario seleccione. Si me puedes contar algo de esto te lo agradecería mucho.

Saludo. Y muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Elementos Select

Publicado por Gonzalo (7 intervenciones) el 27/02/2007 14:58:21
Los elementos select son bastante sencillos. Te explico un poco en general y si acaso tienes alguna duda más concreta, pregúntala.

En Struts tienes unas etiquetas para generarlos. <html:select>, <html:option> y <html:options>.

El objetivo al final es generar algo como:
<select id="color" name="color">
····<option value="verde1">Verde Claro</option>
····<option value="verde2">Verde Aceituna</option>
····<option value="verde3">Verde Esmeralda</option>
</select>

La parte de fuera, el select, es sencillo:
<html:select property="color">
···<!-- ... -->
</html:select>

Los elementos option los puedes generar de varias formas:
1. Directamente con <html:option>. Si por ejemplo tienes sólo una serie de opciones fijas, o si quieres insertar alguna opción fija, puedes usar esto.
<html:option value="verde1">Verde Claro</html:option>
<html:option value="verde2">Verde Aceituna</html:option>
...

2. Si tienes opciones variables, que se obtienen dinámicamente de la base de datos (como en tu caso), o de un fichero de configuración o de donde sea, la forma apropiada es la siguiente:
- El Action correspondiente obtiene esos valores y los guarda en una Collection (o si prefieres, en un array). Luego guardas la lista en la reuqest o en la sesión o en la aplicación, según sea tu caso.
- En el JSP en lugar de <html:option> usa <html:options>, así:
<html:options collection="colores" property="codigo" labelProperty="nombre" />

Ese ejemplo lo que supone es que tienes una colección de objetos con una propiedad que se llama codigo (que será el verde1, verde2...) y otra propiedad que se llama nombre (que será el Verde Claro, Verde Aceituna...).


Puedes incluso usar ambos a la vez:
<html:select property="color">
····<!-- Podríamos por ejemplo poner un valor fijo y los otros obtenidos de la BBDD -->
····<html:option value="none">Sin Preferencia</html:option>
····<html:options collection="colores" property="codigo" labelProperty="nombre" />
</html:select>
Puedes incluso poner varias colecciones dentro de un mismo select. No es muy habitual tener que hacer eso, pero se puede.

(Un detalle más: Al cargar el select, se mira el valor de la property (color, en el ejemplo) del formulario. Según lo que valga se selecciona la opción que corresponda.)


Bien. Esto es lo que se refiere a la primera parte, la de sacar los datos y hacerlos visibles en el formulario. La otra parte de la historia es recibir los valores escogidos.

Esto es bastante sencillo: Te va a llegar como un parametro más, con el nombre "color" y con valor el value de la opción escogida (p.ej. "verde2"). En caso de que no pusieras value ( <html:option>Verde Claro</html:option>) se recibe lo que se ve, "Verde Claro", pero te recomiendo que uses value e identifiques las opciones con algún código mejor que confiar en los literales visibles.

Es decir, que en tu Actionform necesitarás una propiedad color, con su get y set correspondiente:
private String color;
public void setColor(String in) { this.color = in; }
public String getColor() { return this.color; }

Si tuvieras que tener un select con posibilidad de elegir varias opciones, tendrás que añadir la posibilidad de que lleguen varios valores (un array de String):
private String[] colores;
public void setColor(String[] in) { this.colores = in; }
public String[] getColor() { return this.colores; }
// Pero también tenemos que conservar esta, por si sólo llega 1 valor:
public void setColor(String in) { this.colores = new String[1]; colores[0] = in; }

Bueno, lo dicho antes. Lo dejo aquí y si tienes alguna pregunta concreta sobre algún detalle que no haya quedado claro, dilo, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Elementos Select

Publicado por Eva (10 intervenciones) el 27/02/2007 18:42:22
Ok me he puesto con esto ahora mismo porque lo he visto la contestación ahora mismo, mañana me pondre con ello, si dudo algo ya te cuento.
Bueno la primera parte ya la tenia implementada solo me falta recoger el id_estado, espero que me funcione.

Muchas gracias. XXX
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Elementos Select

Publicado por Eva (10 intervenciones) el 28/02/2007 09:55:36
Hola Gonzalo.

No consigo recoger el valor seleccionado del combo, entendí todo lo que me escribiste pero no me funciona creo que hay algo que no estoy entendiendo, pero no se el que, porque yo lo guardo en una coleccion pero no me llega con el valuete voy a poner mi codigo para que me puedas decir que es lo que estoy haciendo mas:

****JSP*****
<html:select property="id_estado">
<html:optionsCollection property="lista_estados" value="id_estado" label="descripcion"/>
</html:select>

Los valores en el combo se muestran correctamente.

*****Action que carga los combos:******

public class anadirDescripcionAction extends DispatchAction{

public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

anadirDescripcionForm anadirDescForm= null;
Incidencias incidencia = new Incidencias();
String id_incidencia= null;
Collection resultadoUsuario= null;
Collection resultadoEstado= null;

try{
/*CABECERA*/

/*Metemos en el formulario la incidencia*/
anadirDescForm = (anadirDescripcionForm)form;

/*Obtenemos el id de la session*/
HttpSession session=request.getSession();
id_incidencia= (String)session.getAttribute("id_incidencia");

incidencia= incidenciasLogica.obtenerIncidenciaPorId(id_incidencia);
anadirDescForm.setIncidencia(incidencia);

/*COMBO USUARIOS*/
resultadoUsuario= (Collection) usuarioLogica.recuperarUsuarios();
anadirDescForm.setLista_usuarios(resultadoUsuario);

/*COMBO ESTADOS*/
resultadoEstado= (Collection) estadosLogica.recuperarEstados();
anadirDescForm.setLista_estados(resultadoEstado);

resultadoEstado.hashCode();

/*Guardamos la collection en session*/ ESTO ES LO QUE DECIAS DE GUARDAR EN UNA COLLECCION Y PONER EN SESION
session.setAttribute("resultadoEstado",resultadoEstado);

}catch (Exception e){
System.out.println("ERROR AL MOSTRAR EL FORMULARIO DE AÑADIR COMENTARIO");
}

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

}

*****Form******
public class anadirDescripcionForm extends ActionForm{

private Collection lista_estados;

public Collection getLista_estados() {
return lista_estados;
}
public void setLista_estados(Collection lista_estados) {
this.lista_estados = lista_estados;
}
}

Tengo mas propiedades pero solo te pongo con lo que estamos trabajando.

*****Action que recoge el valor del combo seleccionado para posteriormente guardarlo*****

public class guardarDescripcionAction extends DispatchAction{

public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {

anadirDescripcionForm anadirDescForm= null;
int descripcion = 0;
int id_descripcion= 0;
String id_incidencia;
Integer id_usuario;
String id_estado;


try{
/*Obtenemos el ultimo id_descripcion y sumamos uno*/
descripcion = descripcionLogica.recuperarIdDescripcion();
id_descripcion= descripcion+1;

/*Obtenemos los datos necesarios para el formulario*/
anadirDescForm = (anadirDescripcionForm)form;
String texto= anadirDescForm.getTexto();

//String id_usuarioasig= anadirDescForm.getId_usuario();/*usuario asignado*/


/*OBTENEMOS LA FECHA DEL SISTEMA*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String fecha = sdf.format(new Date());
System.out.println(fecha);

/*Obtenemos el id en la session*/
HttpSession session=request.getSession();
id_incidencia= (String)(session.getAttribute("id_incidencia"));
System.out.println(id_incidencia);
id_usuario= (Integer)session.getAttribute("id_usuario");/*usuario que realiza la modificación el de la session*/
System.out.println(id_usuario);
AQUI SUPUESTAMENTE LO SACO DE SESION PERO AQUI FALLA ESTO ES LO QUE CREO QUE ESTOY HACIENDO MAL
id_estado= (String)(session.getAttribute("resultadoEstado"));
System.out.println(id_estado);

descripcionLogica.añadirDescripcion(id_descripcion, id_usuario, fecha, texto, id_incidencia, id_estado);

}catch (Exception e){
System.out.println("ERROR GUARDAR UNA NUEVA DESCRIPCION");
}

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

}

Bueno espero que te enteres de algo, sino pues me comentas.
Muchas gracias por todo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Elementos Select

Publicado por Eva (10 intervenciones) el 28/02/2007 10:09:40
Perdona no te comente el error que me da:

No puedo serializar atributo de sesión resultadoEstado para la sesion xxx

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Elementos Select

Publicado por Gonzalo (7 intervenciones) el 28/02/2007 20:01:44
Bueno... vamos por partes.

1. Estás metiendo una cosa y sacando otra. ¡No vale hacer magia! xD

En anadirDescripcionAction, estás haciendo:
····/*Guardamos la collection en session*/
····session.setAttribute("resultadoEstado",resultadoEstado);
Es decir, que guardas la Collection en la sesión. Pero luego en guardarDescripcionAction estás intentando sacar un String:
····id_estado= (String)(session.getAttribute("resultadoEstado"));

Esto, de todos modos, no es el error que te está dando. Es el error que te dará después de arreglar este ;)

2. Es serializable lo que tienes en la Collection?

Para guardar cosas en la sesión, esas cosas deben ser serializables. No sé qué tipo de Collection estará generando estadosLogica.recuperarEstados() y tampoco sé qué objetos estás metiendo en la colección, pero es necesario que sean serializables para poder meterlos en la sesión.

Aún así... realmente esto tampoco te hace falta. (*)

3. El id_estado no necesitas sacarlo de la sesión. Está en el formulario recibido.

Quiero decir, en tu formulario tienes puesto el <html:select property="id_estado">, no? Pues eso es lo que tienes que mirar cuando lo recibas. Quiero decir, en el formulario tendrás el get y set de id_estado, para recibir el que haya seleccionado el usuario. (Igual que sacas el texto, por ejemplo, o el id_usuarioasig, aunque este esté comentado)


----------------------------
Algunas notas adicionales...

4. Lo que marcaba como (*) es que puede haber alguna situación en la que quieras guardar esas opciones en la sesión, pero en general no lo necesitas, ni tampoco es lo que quieres.

5. La línea (en anadirDescripcionAction):
····resultadoEstado.hashCode();
así suelta, no sirve para nada. Puedes quitarla tranquilamente.

6. Mejor que hacer esto:
····/*Obtenemos el ultimo id_descripcion y sumamos uno*/
····descripcion = descripcionLogica.recuperarIdDescripcion();
····id_descripcion= descripcion+1;
Deberías llamar al método algo como "obtenerNuevoIdDescripcion" y que sea dentro de ese método donde sume 1 (o haga la operación que sea para que el IdDescripcion sea uno nuevo). ¿Por qué? Porque eso es más flexible. Te permite que si el día de mañana haces que el IdDescripcion se obtenga de otra forma que no sea sumar 1, sino que a lo mejor se llama a un procedimiento de BBDD o lo que sea, sólo tengas que cambiar en un sitio, en ese método, y no en todos los sitios donde sumabas 1.

Y bueno, ya sabes, si tienes alguna duda más, pregunta. (Aunque si no es sobre el mismo tema, quizá mejor ponlo en un tema nuevo :) )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Elementos Select

Publicado por rodrigo (1 intervención) el 17/05/2007 22:26:33
Wwoowwwrales....! Que ayudadota.

Gracias muy clara y muy detallada explicación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Elementos Select

Publicado por Ricardo (2 intervenciones) el 11/07/2008 22:25:36
Hola Gonzalo
En el caso de que se quiera que el valor (html:option) de un html:select dependa del resultado de otro, un ejemplo típico en el caso en que seleccionamos el mes y con esto seleccionamos un día que en cantidad va a depender del mes que escoja el usuario más aun depende en el caso de febrero del año que el usuario ha escogido, o en otro ejemplo dado un país seleccionado por un usuario desde un select actualizar el siguiente select con las ciudades de dicho país.
Como puedo obtener estos datos sin que el usuario tenga que oprimir un boton, que me lleve al action y que se recargue toda la pagina. Ver la forma de que se cambien los value de forma dinamica.

Bueno ojala puedas ayudarme un poco con esto,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Elementos Select

Publicado por Ricardo (2 intervenciones) el 11/07/2008 22:26:22
Hola Gonzalo
En el caso de que se quiera que el valor (html:option) de un html:select dependa del resultado de otro, un ejemplo típico en el caso en que seleccionamos el mes y con esto seleccionamos un día que en cantidad va a depender del mes que escoja el usuario más aun depende en el caso de febrero del año que el usuario ha escogido, o en otro ejemplo dado un país seleccionado por un usuario desde un select actualizar el siguiente select con las ciudades de dicho país.
Como puedo obtener estos datos sin que el usuario tenga que oprimir un boton, que me lleve al action y que se recargue toda la pagina. Ver la forma de que se cambien los value de forma dinámica.

Bueno ojala puedas ayudarme un poco con esto,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar