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

Struts2 como cargar una select con datos del Resultset

Estas en el tema de Struts2 como cargar una select con datos del Resultset en el foro de Java en Foros del Web. Hola a todos espero que este sea el lugar correcto para mi consulta, he estado buscando la forma de hacer lo siguiente: necesito crear un ...
  #1 (permalink)  
Antiguo 26/01/2012, 07:05
Avatar de LancelotKnight  
Fecha de Ingreso: octubre-2005
Ubicación: Madrid-España
Mensajes: 20
Antigüedad: 18 años, 5 meses
Puntos: 2
Struts2 como cargar una select con datos del Resultset

Hola a todos

espero que este sea el lugar correcto para mi consulta, he estado buscando la forma de hacer lo siguiente: necesito crear un control select con Struts2 que cargue datos de un resultset. He visto varios tutoriales pero no encuentro la forma de hacerlo :( hasta el momento tengo esto

Código PHP:
while(rs.next()){

    
lista.setIdTipoTelefonoUsuario(rs.getInt("ID"));
    
lista.setNombreTelefonoUsuario(rs.getString("NOMBRE"));
    

el metodo es

Código PHP:
private static Listas TiposUsuario(Listas lista){ 
donde "lista" es el objeto del bean Listas que tiene el ID y NOMBRE del elemento a cargar en el combo, pero soy incapaz de encontrar la forma de cargar en el combo dichos valores.

Les agradezco su ayuda.

saludos!
  #2 (permalink)  
Antiguo 26/01/2012, 10:23
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 1 mes
Puntos: 78
Respuesta: Struts2 como cargar una select con datos del Resultset

Hola,
los datos tienes que meterlos del ResultSet ------------> HashMap

Luego en el <s:select.... list='Nombre_de_tu_hashMap'

Un saludo.
  #3 (permalink)  
Antiguo 30/01/2012, 06:52
Avatar de LancelotKnight  
Fecha de Ingreso: octubre-2005
Ubicación: Madrid-España
Mensajes: 20
Antigüedad: 18 años, 5 meses
Puntos: 2
Respuesta: Struts2 como cargar una select con datos del Resultset

gracias por la respuesta, pero una cosa.. yo estoy llamando a esa lista asi

Código PHP:
listTipoFonoUsr ListasDAO.TiposTelefonoUsuario(); 
donde listTipoFonoUsr es un ArrayList, los datos llegan bien hasta aqui, esto esta dentro de un metodo

Código PHP:
 public String Paso3() throws Exception
que hace un return SUCCESS nada mas

esto lleva al form donde "deberia" cargar el combo

ahi es el problema o quiza antes
  #4 (permalink)  
Antiguo 30/01/2012, 13:22
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 1 mes
Puntos: 78
Respuesta: Struts2 como cargar una select con datos del Resultset

Hola,
lo que tienes que hacer es en vez de usar ArrayList tienes que usar HashMap, es un tipo de lista en el que puedes (debes) asignar una clave a cada valor.

Es decir: HashMap<String, String>

Luego en el JSP <s:select list="NombreDeTuHashMap" name="NombreQueRecogeras">

El HashMap deberás ponerle su método getter correspondiente para poder recuperarlo desde el JSP.

Un saludo!
  #5 (permalink)  
Antiguo 01/02/2012, 04:48
Avatar de LancelotKnight  
Fecha de Ingreso: octubre-2005
Ubicación: Madrid-España
Mensajes: 20
Antigüedad: 18 años, 5 meses
Puntos: 2
Respuesta: Struts2 como cargar una select con datos del Resultset

Muchas gracias el HashMap lo solucion pero meti el objeto en session y asi pude cargarlo..

Código PHP:
<s:select     
name
="TipoTelefonoUsuario" 
key="Registro.etiqueta.TipoTelefono" 
list="%{#session.lstTipoTelfUsr}" 
headerKey=""  
headerValue=""     
required="true" 
cssClass="{validate:{required:true}}">
</
s:select
Código PHP:
tipoTlfUsrMap.put(lista.getIdTipoTelefonoUsuario(),lista.getNombreTelefonoUsuario()); 
Código PHP:
session.put("lstTipoTelfUsr"listTipoFonoUsr); 
es una buena practica???
  #6 (permalink)  
Antiguo 01/02/2012, 04:56
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 1 mes
Puntos: 78
Respuesta: Struts2 como cargar una select con datos del Resultset

Hola LancelotKnight,
lo ideal seria no ponerlo en un objeto session si realmente no vas a usar la lista más adelante.

La buena práctica (estando en Struts2) sería:

1.- Creas el HashMap con tu lista de valores (key, valor) (Esto ya lo tienes)
2.- Creas un método getter de este HashMap
3.- El select lo creas de la siguiente manera:


Código Java:
Ver original
  1. <s:select      
  2. name="TipoTelefonoUsuario"  
  3. key="Registro.etiqueta.TipoTelefono"  
  4. list="lstTipoTelfUsr"  
  5. headerKey=""  
  6. headerValue=""      
  7. required="true"  
  8. cssClass="{validate:{required:true}}">
  9. </s:select>


Verás que únicamente he cambiado el parametro "List", poniendole el nombre del HashMap de tu Action, que al tener el método getter que habrás creado, podrás recogerlo directamente de esta manera, no se si me he explicado.

Te ahorras tener una sesión activa con el contenido de la lista, que no te hace falta porque no vas a usarla más adelante.

Un saludo!!
  #7 (permalink)  
Antiguo 01/02/2012, 05:33
Avatar de LancelotKnight  
Fecha de Ingreso: octubre-2005
Ubicación: Madrid-España
Mensajes: 20
Antigüedad: 18 años, 5 meses
Puntos: 2
Respuesta: Struts2 como cargar una select con datos del Resultset

Muchisimas gracias, yo tampoco comparto la idea de meter cosas a la session que luego no se usa en toda la app.. lo tengo montado asi.. una clase ListaDAO que tiene el metodo que carga el HashMap y ademas estos metodos


Código PHP:
public static HashMap getTipoTlfUsrMap() {
        return 
tipoTlfUsrMap;
    }

public static 
void setTipoTlfUsrMap(HashMap tipoTlfUsrMap) {
        
ListasDAO.tipoTlfUsrMap tipoTlfUsrMap;
    } 
luego desde otra clase llamo a este metodo ,

Código PHP:
listTipoFonoUsr ListasDAO.TiposTelefonoUsuario(); 
y hago un return SUCCESS si todo esta bien. Ahora los metodos get/set deben estar en la clase ListaDAO o en la clase que llama a el metodo que carga el HashMap??

porque al hacer el cambio en el JSP me da un casque

The requested list key 'lstTipoTelfUsr' could not be resolved as a collection/array/map/enumeration/iterator type.


gracias!
  #8 (permalink)  
Antiguo 01/02/2012, 06:00
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 1 mes
Puntos: 78
Respuesta: Struts2 como cargar una select con datos del Resultset

Hola LancelotKnight!
El método setter del HashMap no te va a hacer falta. Solo el getter (para recuperar)

Por ejemplo, tenemos:
Clase -> ListaDAO
Clase -> Action
JSP -> Donde mostrarás el SELECT

Con estas tres cosas, la mejor opción es:
ListaDAO -> Debe tener un método que devuelva el HashMap
Action -> Lláma a ListaDAO al método que le devuelva el HashMap
Action -> Debe tener un método getter de HashMap
JSP -> En el Select, poner en el parámetro "list" el nombre del HashMap que tienes definido en el Action.

Si algo dudas, no dudes en preguntarme.

Un saludo!
  #9 (permalink)  
Antiguo 01/02/2012, 06:50
Avatar de LancelotKnight  
Fecha de Ingreso: octubre-2005
Ubicación: Madrid-España
Mensajes: 20
Antigüedad: 18 años, 5 meses
Puntos: 2
Respuesta: Struts2 como cargar una select con datos del Resultset

Ok entiendo.. yo lo tengo montado asi

ListaDAO.java
Código PHP:
public static HashMap TiposTelefonoUsuario(){
        
        
ResultSet rs null;
        
Statement stmt null;
        
ArrayList ListasTipo = new ArrayList();
        
Listas lista = new Listas();
        
        
ConfigQuerys objQuerys = new ConfigQuerys();
        
String listaTiposTelefonosUsr objQuerys.getListaTiposTelefonosUsr();
            
        try{            
            
currentCon ObtenerConn();
            
stmt currentCon.createStatement();
            
rs stmt.executeQuery(listaTiposTelefonosUsr);
            
            while(
rs.next()){
                
Listas listaTipo = new Listas();
                
listasTipo=new ArrayList();
                
                
lista.setIdTipoTelefonoUsuario(rs.getInt("TTF_CO_ID"));
                
lista.setNombreTelefonoUsuario(rs.getString("TTF_VC_TIPO"));
                
tipoTlfUsrMap.put(lista.getIdTipoTelefonoUsuario(),lista.getNombreTelefonoUsuario());
                
            }
        }catch (
Exception e){
            
System.out.println("Exception capturada! " e);
            
e.printStackTrace();
        }
        return 
tipoTlfUsrMap;
    } 
Action PreRegistro.java
Código PHP:
HashMap listTipoFonoUsr = new  HashMap();
    
    public 
String Paso3() throws Exception{
        
idiomaObj.execute();
        
        
PreRegistroUsr preReg = new PreRegistroUsr(); 
        
preReg.setEmailPreRegistro(emailpr);
        
preReg.setPasswordPreRegistro(passwordpr);
        
        
//ArrayList listTipoFonoUsr = new  ArrayList();
                  
        
preReg UsuarioDAO.ValidarPreRegistro(preReg);
        
          
System.out.println("Nombre"+preReg.getNombrePreRegistro());
          
          
//Preguntamos si el envio se realizo con exito
          
if(preReg.isValid()){
              
Map session ActionContext.getContext().getSession();
              
listTipoFonoUsr ListasDAO.TiposTelefonoUsuario();
              
//session.put("context", new Date());
              
session.put("usuario"preReg);
              
//session.put("lstTipoTelfUsr", listTipoFonoUsr);
              
              
addActionMessage(getText("Mensaje.PreRegistro.addActionMessage"));
              return 
SUCCESS;
          }else{
              
addActionError(getText("Mensaje.PreRegistro.addActionError"));
              return 
ERROR;
          }
      
    } 
y en este Action esta tambien


Código PHP:
public HashMap getListTipoFonoUsr() {
        return 
listTipoFonoUsr;
    }

    public 
void setListTipoFonoUsr(HashMap listTipoFonoUsr) {
        
this.listTipoFonoUsr listTipoFonoUsr;
    } 
y por ultimo el JSP

Código PHP:
<s:select      
name
="TipoTelefonoUsuario"  
key="Registro.etiqueta.TipoTelefono"  
list="listTipoFonoUsr"  
headerKey=""   
headerValue=""      
required="true"  
cssClass="{validate:{required:true}}"
</
s:select
pero por algun motivo divino no me sale jejejejeje

tendre que tocar algo del struts.xml??
  #10 (permalink)  
Antiguo 01/02/2012, 09:01
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 1 mes
Puntos: 78
Respuesta: Struts2 como cargar una select con datos del Resultset

Hola LancelotKnight,
para asegurarte que tienes la lista llena en el action, justo antes del SUCCESS haz un "listTipoFonoUsr.size()" en un System.out.print(); a ver si te sale un tamaño mayor que 0.

Una prueba más sencilla es declarar en el action un String, le das un valor simbólico y trata de recogerlo desde el JSP con un <s:property value="nombre_de_tu_string"/>

Un saludo!
  #11 (permalink)  
Antiguo 02/02/2012, 04:37
Avatar de LancelotKnight  
Fecha de Ingreso: octubre-2005
Ubicación: Madrid-España
Mensajes: 20
Antigüedad: 18 años, 5 meses
Puntos: 2
Respuesta: Struts2 como cargar una select con datos del Resultset

gracias!!

lo cierto es que si que hay datos

Código PHP:
System.out.println(listTipoFonoUsr.size()); 
me da la cantidad de valores

pero la prueba del campo string no funciono , simplemente no llega el valor

Código PHP:
String prueba "Hola"
Código PHP:
<s:property value="prueba"/> 
no es la primera vez que me sucede.. no tendra que ver con el struts.xml?
  #12 (permalink)  
Antiguo 02/02/2012, 05:07
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 1 mes
Puntos: 78
Respuesta: Struts2 como cargar una select con datos del Resultset

Por cierto, está nevando por ahí por los madriles???

Pues el problema está localizado, pero falta la solución, jeje.

No recoges los objetos de los Actions desde los JSPs, el resto está todo bien.

He realizado una prueba básica, un proyecto nuevo.

Mi struts.xml

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
  3. <struts>
  4.     <package name="app" extends="struts-default">
  5.         <action name="test" class="app.Test">
  6.             <result name="success">/test.jsp</result>
  7.         </action>
  8.  </package>
  9. </struts>

Mi Action:

Código Java:
Ver original
  1. package app;
  2.  
  3.  
  4. import com.opensymphony.xwork2.ActionSupport;
  5.  
  6.  
  7. public class Test extends ActionSupport {
  8.  
  9.     private String nombre;
  10.        
  11.    
  12.     public String getNombre() {
  13.         return nombre;
  14.     }
  15.  
  16.  
  17.     public String execute() {
  18.        
  19.         nombre = "Pepito";
  20.        
  21.         return SUCCESS;
  22.     }
  23.    
  24.  
  25. }

Mi JSP:

Código JSP:
Ver original
  1. <%@ taglib uri="/struts-tags" prefix="s" %>
  2. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  3.     pageEncoding="ISO-8859-1"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <body>
  7. Hola <s:property value="nombre"/>
  8. </body>
  9. </html>


Solo con esto, al ejecutar el action, me sale por pantalla el "pepito". Todo Ok.

........ porque ejecutas el Action en vez del JSP...... verdad?

Un saludo!
  #13 (permalink)  
Antiguo 02/02/2012, 05:17
Avatar de LancelotKnight  
Fecha de Ingreso: octubre-2005
Ubicación: Madrid-España
Mensajes: 20
Antigüedad: 18 años, 5 meses
Puntos: 2
Respuesta: Struts2 como cargar una select con datos del Resultset

Nevar? naaaaa hace frio si, pero no cae nieve... este clima nos va a traer problemas en verano

yo el struts lo tengo asi..

Código PHP:
<action name="PreRegistroP3Action" class="com.saetav2.action.PreRegistro" method="Paso3">
            <
result name="success" type="tiles">/registrousuario.tiles</result>
            <
result name="error" type="tiles">/registrousuario.tiles</result>
        </
action
y en tiles

Código PHP:
<definition name="/registrousuario.tiles" extends="baseLayoutApp">
        <
put-attribute name="title" value="Registro de Usuario" />
        <
put-attribute name="header" value="/jsp/app/header.jsp" />
        <
put-attribute name="content" value="/jsp/app/registrousuario.jsp" />
        <
put-attribute name="footer" value="/jsp/app/footer.jsp" />
    </
definition

y bueno en principio me funciona porque para entrar a esta pagina hay que hacer un login y trae algunos datos que meto en sesion, pero son datos del usuario, si meto ahi la lisa de hashmap me funciona pero por "buenas practicas" no queria usar la sesion para esas cosas.. :(
  #14 (permalink)  
Antiguo 02/02/2012, 05:50
Avatar de LancelotKnight  
Fecha de Ingreso: octubre-2005
Ubicación: Madrid-España
Mensajes: 20
Antigüedad: 18 años, 5 meses
Puntos: 2
Respuesta: Struts2 como cargar una select con datos del Resultset

Ya me funciona!!!! no se que paso jejeje pero asi como esta con el ultimo cambio funciona sin usar session de ptm! gracias!!!!
  #15 (permalink)  
Antiguo 02/02/2012, 06:15
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 1 mes
Puntos: 78
Respuesta: Struts2 como cargar una select con datos del Resultset

Ok!! Me alegro!

Un saludo

Etiquetas: combo, resultset, select, struts2, tag
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 07:18.