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

Problema con LookUpDispatchAction

Estas en el tema de Problema con LookUpDispatchAction en el foro de Java en Foros del Web. Tengan un buen día foreros. Primeramente no estoy seguro si aquí es el subforo idóneo para poner algo sobre Struts, si no lo es pues ...
  #1 (permalink)  
Antiguo 09/07/2008, 22:35
 
Fecha de Ingreso: marzo-2007
Ubicación: En El salvador
Mensajes: 78
Antigüedad: 17 años, 1 mes
Puntos: 0
Problema con LookUpDispatchAction

Tengan un buen día foreros. Primeramente no estoy seguro si aquí es el subforo idóneo para poner algo sobre Struts, si no lo es pues de antemano pido disculpas. Estoy trabajando con struts usando como IDE Jdeveloper. y he estado tratando de hacer uso de LookUpDispatchAction pues tengo un menú en el cual tengo varios botones que me llevan a diversas páginas, para lo cual en un solo action quiero tener los métodos que retornarán los action mappings diversos para ir a una página jsp o a otra, el punto es que he leido unos 10 tutoriales distintos y noto ciertas diferencias entre unos y otros, pero tambien me he guiado por libros PDF y ya lo hice varias veces, al pié de la letra y no me funciona, sencillamente cuando presiono un botón solo me sale una url larga pero luego no me muestra nada, simplemente en blanco en mi navegador. Les muestro l código para que lo vean (No pondré todo el código del action o del jsp, solo el que interviene):

- mainMenu.jsp (aqui hay varios botones para ir a varias paginas, para el caso solo tengo 2 botones ahorita)
Código:
<html:form action="/MainMenuAction">
                <html:submit property="metodo"><bean:message key="submit.add"/></html:submit>
                <html:submit property="metodo"><bean:message key="submit.edit"/></html:submit>
            </html:form>
-MainMenuForm no lo pongo porque mainMenu.jsp no tiene campos como un textfield o algo por el estilo, pero igual en mi proyecto esta creado dicho AtionForm

- MainMenuAction (el action que controla los requests de mainMenu, aclaro que aunque no lo ponga aquí, este action implementa la interfaz LookUpDispachAction y no borré el método execute)
Código:
    protected Map getKeyMethodMap() 
    {
        Map mapa = new HashMap();
        mapa.put("submit.add", "add");
        mapa.put("submit.edit", "edit");
        return mapa;
    }
    
    public ActionForward add(ActionMapping mapping, ActionForm form, 
                                 HttpServletRequest request, 
                                 HttpServletResponse response) throws IOException, 
                                                                      ServletException 
    {
        return mapping.findForward( "add");
    }
    
    public ActionForward edit(ActionMapping mapping, ActionForm form, 
                                 HttpServletRequest request, 
                                 HttpServletResponse response) throws IOException, 
                                                                      ServletException 
    {
        return mapping.findForward( "edit");
    }
- struts-config
Código:
<form-beans>
    <form-bean name="LoginForm" type="empresa.banco.forms.LoginForm"/>
    <form-bean name="MainMenuForm" type="empresa.banco.forms.MainMenuForm"/>
    <form-bean name="AddProductForm" type="empresa.banco.forms.AddProductForm"/>
    <form-bean name="ModProductForm" type="empresa.banco.forms.ModProductForm"/>
  </form-beans>
  <action-mappings>
           
    <action path="/MainMenuAction" type="empresa.banco.actions.MainMenuAction"
            name="MainMenuForm" parameter="metodo" scope="request" validate="true">
      <forward name="add" path="/addProduct.jsp"/>
      <forward name="edit" path="/modProduct.jsp"/>
    </action>
    <action path="/AddProductAction"
            type="empresa.banco.actions.AddProductAction"
            name="AddProductForm"/>
    <action path="/ModProductAction"
            type="empresa.banco.actions.ModProductAction"
            name="ModProductForm"/>
  </action-mappings>
  <message-resources parameter="empresa.banco.ApplicationResources"/>
- addProducto.jsp y modProducto.jsp son las jsp destino dependiendo si presiono el primer boton submit del form o el segundo respectivamente, no pongo el código porque simplemente no tienen nada, solo un texto plano que diferencia una página de la otra, solo a modo de ejemplo para comprobar si me funciona, pero como pueden ver en struts-config estas ultimas 2 jsp tienen sus respectivos actionForms y Actions, por lo que no creo que eso me de error.

Considero uqe he seguido al pié de la letra todos los pasos de los tutoriales e incluso entiendo la logica (o al menos eso creo) pero por alguna razón no me funciona, si digamos le doy click a un botón pues sale como si me llevara a la jsp pero no carga nada, solo en blanco y al ver el código fuente ni me aparece codigo fuente, y en la URL me aparece así:

http://192.168.1.6:8989/banco-ViewCo...0df4957d08eb74

Tambien otra cosa, nose si tenga que ver ni entiendo porque me sale así, en mi Jdeveloper cuando estoy editando el código de la JSP, en tutoriales he visto que le meten un bean:message dentro de un html:submit para "rotular" dicho boton, de la siguiente manera:

<html:submit property="metodo">
<bean:message key="submit.add"/>
</html:submit>

Lo hago en mi JSP pero en Jdeveloper me sale como que si estuviera erróneo eso de tener el submit de la siguiente manera:

<html:submit property="metodo"></html:submit>

Porque cuando lo arrastro de la paleta de controles de Jdeveloper el código que crea es así:

<html:submit/>

Pero si lo modifico y lo dejo con un tag de apertura y uno de cierre me da error, pueden verlo en la siguiente imagen:

http://www.oscarcalderon.info/struts/error.JPG

A pesar de ello, al compilar el proyecto funciona y corre la jsp de manera normal, pero nose si eso será la razon por la cual no funcione el uso de LookUpDispatchAction, por favor ayudenme.
  #2 (permalink)  
Antiguo 10/07/2008, 10:46
Usuario no validado
 
Fecha de Ingreso: junio-2008
Mensajes: 386
Antigüedad: 15 años, 10 meses
Puntos: 10
Respuesta: Problema con LookUpDispatchAction

Hola,

Pues no esta por demas probar otra cosa:

En el tag <html:form prueba poniendole la extension .do,
<html:form action="/MainMenuAction.do">

y en el struts-config, en el action path="/MainMenuAction, ponle al atributo validate = false

<action path="/MainMenuAction" type="empresa.banco.actions.MainMenuAction"
name="MainMenuForm" scope="request" validate="false">

Supongo que tu clase MainMenuAction extiende de Action y que tienes el metodo execute.

Pruebalo y nos avisas.

saludos!
  #3 (permalink)  
Antiguo 10/07/2008, 15:56
 
Fecha de Ingreso: marzo-2007
Ubicación: En El salvador
Mensajes: 78
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Problema con LookUpDispatchAction

Bueno, ya había probado eso de ponerle o no .do, y no me había funcionado de ninguna forma, también puse la propiedad validate como false y tampoco, lo que si que noto que como les comenté que al presionar en un botón me salía una URL larga con muchos numeros, cuando pongo .do en el action del html:form me aparece esta URL:

http://192.168.1.6:8989/banco-ViewCo...nMenuAction.do

Y bueno según he leído en los libros me debería aparecer algo como

http://192.168.1.6:8989/banco-ViewCo....do?metodo=add

Es bastante extraño, y con lo que dices, MainMenuAction no extiende la clase action, extiende de la clase LookUpDispatchAction y si tengo el metodo execute, pero lo tengo vacío, es decir sin lógica.

Con respecto a lo de la imagen que puse, a nadie le da ese como errorcito de tags? Sea en Eclipse o NetBeans o algo asi? o será porque la versión de struts que utilizo no admite hacer los tags de esa manera?

Última edición por 0skar; 10/07/2008 a las 16:01 Razón: Agregar otra pregunta
  #4 (permalink)  
Antiguo 10/07/2008, 16:05
Usuario no validado
 
Fecha de Ingreso: junio-2008
Mensajes: 386
Antigüedad: 15 años, 10 meses
Puntos: 10
Respuesta: Problema con LookUpDispatchAction

Esta bien que te ponga todos esos "numeritos" en la barra de direcciones cuando le das Aceptar, ya que es la session que maneja internamente struts.

No se como tengas configurada tu aplicacion, pero lo que se es que cuando mandas a llamar a tu clase MainMenuAction, ésta debe de extender de Action.

Pregunta: ¿En el metodo execute mandas a llamar tus metodos add y edit??

Dejale el atributo validate=false
  #5 (permalink)  
Antiguo 10/07/2008, 16:51
 
Fecha de Ingreso: marzo-2007
Ubicación: En El salvador
Mensajes: 78
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Problema con LookUpDispatchAction

No, el método execute está ahi pero no tiene nada, no mando a llamar ningun método desde ahi.

Bueno con lo que dices que debe extender de action, yo crei que era de LookUpDispatchAction, porque sino como se denota ante el motor de struts que se está utilizando LookUpDispatchAction?
  #6 (permalink)  
Antiguo 11/07/2008, 07:47
Usuario no validado
 
Fecha de Ingreso: junio-2008
Mensajes: 386
Antigüedad: 15 años, 10 meses
Puntos: 10
Respuesta: Problema con LookUpDispatchAction

Hola, tu clase MainMenuAction si debe de extender de LookupDispatchAction.

Me dices que tienes el metodo execute, quitaselo y tu aplicacion funcionara!!

Ahi nos avisas que paso.

saludos!
  #7 (permalink)  
Antiguo 11/07/2008, 10:02
 
Fecha de Ingreso: marzo-2007
Ubicación: En El salvador
Mensajes: 78
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Problema con LookUpDispatchAction

Te agradezco Bunbury, ahora si me funciona, pero bueno disculpa la pregunta que talvez parecerá muy básica pero no encuentro como la respuesta en libros o en pdf's y es:

¿Porque no debo implementar el metodo execute() para que me funcione?
  #8 (permalink)  
Antiguo 11/07/2008, 10:39
Usuario no validado
 
Fecha de Ingreso: junio-2008
Mensajes: 386
Antigüedad: 15 años, 10 meses
Puntos: 10
Respuesta: Problema con LookUpDispatchAction

Hola, que bueno que te funciono.

Esta es la jerarquia de las clases:

java.lang.Object
org.apache.struts.action.Action
org.apache.struts.actions.BaseAction
org.apache.struts.actions.DispatchAction
org.apache.struts.actions.LookupDispatchAction

Y cuando tu clase extiende de LookupDispatchAction, ésta pertence a la clase DispatchAction, y la clase DispatchAction implementa el metodo execute.

Segun, la documentacion dice:
"... tu clase que extiende de LookupDispatchAction no debe implementar el metodo execute(), porque la clase DispatchAction implementa este metodo... "

En cambio, si tu clase extiende de Action, al ponerle el metodo execute(), quiere decir que estas sobrecargando este metodo para que haga algo en particular.

Espero te haya servido.

saludos!
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 09:33.