Pregunta

Tengo las siguientes rayas ActionBean:

package myapp;

import net.sourceforge.stripes.action.*;

public class WelcomeActionBean extends MyAppActionBean {
    @DefaultHandler
    public Resolution view() {
        return new ForwardResolution("/welcome.jsp");
    }
}

Cuando cargo /myapp/welcome.action en un navegador, se muestran el contenido de Welcome.jsp.

Sin embargo, cuando muevo WELD.jsp a /webinf/jsp/welcome.jsp y cambio el argumento de reenvío para reflejar ese cambio, es decir:

return new ForwardResolution("/WEB-INF/jsp/welcome.jsp");

Recibo el siguiente error cuando carga /myapp/welcome.action:

net.sourceforge.stripes.exception.ActionBeanNotFoundException: Could not locate an ActionBean that is bound to the URL [/Welcome.action]. Commons reasons for this include mis-matched URLs and forgetting to implement ActionBean in your class. Registered ActionBeans are: {/controller/DefaultView.action=class net.sourceforge.stripes.controller.DefaultViewActionBean, /myapp/MyApp.action/=class myapp.MyAppActionBean, /myapp/Welcome.action/=class myapp.WelcomeActionBean, /controller/DefaultView.action/=class net.sourceforge.stripes.controller.DefaultViewActionBean, /myapp/MyApp.action=class myapp.MyAppActionBean, /myapp/Welcome.action=class myapp.WelcomeActionBean}
    net.sourceforge.stripes.controller.AnnotatedClassActionResolver.getActionBean(AnnotatedClassActionResolver.java:341)
    net.sourceforge.stripes.controller.NameBasedActionResolver.getActionBean(NameBasedActionResolver.java:264)
    net.sourceforge.stripes.controller.AnnotatedClassActionResolver.getActionBean(AnnotatedClassActionResolver.java:293)
    net.sourceforge.stripes.controller.DispatcherHelper$1.intercept(DispatcherHelper.java:106)
    net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:158)
    net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:113)
    net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155)
    net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:74)
    net.sourceforge.stripes.controller.DispatcherHelper.resolveActionBean(DispatcherHelper.java:102)
    net.sourceforge.stripes.controller.DispatcherServlet.resolveActionBean(DispatcherServlet.java:238)
    net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:141)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:247)

¿Es necesario realizar cualquier configuración especial para almacenar archivos JSP en el directorio web-INF?

¿Fue útil?

Solución

Mi entendimiento es lo siguiente: tu WelcomeActionBean en no en un paquete ([web, www, rayas, acción]) manejado automáticamente por el NameBasedActionResolver (lea el javadoc) para que en realidad esté asignado a /myapp/Welcome.action (Como se indica en el mensaje de error).

Entonces, cuando solicitas /Welcome.action, no hay ninguna existencia ActionBean atado a esa URL y al resolución de respaldos a /welcome.jsp (De nuevo, ver el NameBasedActionResolver Javadoc). Y cuando mueves tu JSP debajo /WEB-INF/jsp, Bueno, te quedas sin suerte y todo simplemente falla.

Para resolver esto, ya sea:

  • Acceda a la URL "correcta" (en el estado actual) ANIA IE, es decir /myapp/Welcome.action

  • O, si quieres que tu acción bean esté obligada a /Welcome.action Por las convenciones, muévalo en un paquete manejado por el NameBasedActionResolver, p.ej action:

    package myapp.action;
    
    import net.sourceforge.stripes.action.*;
    
    public class WelcomeActionBean extends MyAppActionBean {
        @DefaultHandler
        public Resolution view() {
            return new ForwardResolution("/WEB-INF/jsp/welcome.jsp");
        }
    }
    
  • O agregar un @UrlBinding a su acción para configurar el enlace explícitamente:

    package myapp;
    
    import net.sourceforge.stripes.action.*;
    
    @UrlBinding("/Welcome.action")
    public class WelcomeActionBean extends MyAppActionBean {
        @DefaultHandler
        public Resolution view() {
            return new ForwardResolution("/WEB-INF/jsp/welcome.jsp");
        }
    }
    

Otros consejos

WEB-INF es un directorio especial, y su contenido no es accesible para el cliente. (Tiene sentido: no desea que el cliente pueda descargar su web.xml o tu .class archivos.)

Debe mover los archivos JSP fuera de WEB-INF.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top