Question

J'ai les rayures suivantes ActionBean:

package myapp;

import net.sourceforge.stripes.action.*;

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

Lorsque je charge /myapp/welcome.action dans un navigateur, le contenu de Welcome.jsp est affiché.

Cependant, lorsque je déplace Welcome.jsp sur /web-inf/jsp/welcome.jsp et modifie l'argument ForwardResolution pour refléter ce changement, c'est-à-dire:

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

J'obtiens l'erreur suivante lorsque je charge /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)

Est-il nécessaire d'effectuer une configuration spéciale afin de stocker des fichiers JSP dans le répertoire Web-INF?

Était-ce utile?

La solution

Ma compréhension est ce qui suit: votre WelcomeActionBean dans pas dans un package ([web, www, rayures, action]) géré automatiquement par le NameBasedActionResolver (Lisez le javadoc) pour qu'il soit en fait mappé à /myapp/Welcome.action (comme indiqué dans le message d'erreur).

Alors, quand vous demandez /Welcome.action, il n'y a aucun existant ActionBean lié à cette URL et aux replies de résolveur à /welcome.jsp (Encore une fois, voyez le NameBasedActionResolver Javadoc). Et quand vous déplacez votre jsp sous /WEB-INF/jsp, Eh bien, vous manquez de chance et tout échoue.

Pour résoudre ce problème, soit:

  • Accéder à la liaison "droite" (à l'état actuel) IE /myapp/Welcome.action

  • Ou, si vous voulez que votre ActionBean soit obligé de /Welcome.action par les conventions, déplacez-la dans un paquet géré par le NameBasedActionResolver, par exemple 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");
        }
    }
    
  • Ou ajouter un @UrlBinding à votre action pour configurer explicitement la liaison:

    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");
        }
    }
    

Autres conseils

WEB-INF est un répertoire spécial, et son contenu n'est pas accessible au client. (Cela a du sens - vous ne voudriez pas que le client puisse télécharger votre web.xml ou votre .class des dossiers.)

Vous devez déplacer les fichiers jsp en dehors de WEB-INF.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top