Frage

Ich habe die folgenden Stripes ActionBean:

package myapp;

import net.sourceforge.stripes.action.*;

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

Wenn ich /myapp/welcome.action in einem Browser lade, wird der Inhalt von Welcome.jsp angezeigt.

Wenn ich jedoch willkommen.jsp zu /web-inf/jsp/welcome.jsp bewegen und das ForwardResolution-Argument ändern, um diese Änderung widerzuspiegeln, dh:

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

Ich erhalte den folgenden Fehler, wenn ich /myapp/welcome.Action: lade:

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)

Ist es notwendig, eine spezielle Konfiguration durchzuführen, um JSP-Dateien im Web-INF-Verzeichnis zu speichern?

War es hilfreich?

Lösung

Mein Verständnis ist das folgende: Ihre WelcomeActionBean in nicht in einem Paket ([Web, www, stripes, action]) automatisch behandelt von der NameBasedActionResolver (Lesen Sie den Javadoc), damit es tatsächlich zugeordnet ist /myapp/Welcome.action (Wie in der Fehlermeldung angegeben).

Also, wenn Sie anfordern /Welcome.action, Es gibt keine existierenden ActionBean an diese URL und den Resolver Fallbacks an gebunden /welcome.jsp (Sehen Sie wieder die NameBasedActionResolver Javadoc). Und wenn Sie Ihren JSP unter bewegen /WEB-INF/jsp, Nun, Ihnen geht das Glück aus und alles scheitert einfach.

Um dies zu lösen, entweder:

  • Zugriff auf die URL -Bindung von "rechts" (im aktuellen Status) IE /myapp/Welcome.action

  • Oder wenn Sie möchten, dass Ihre Aktionskanze gebunden ist /Welcome.action Bewegen Sie es durch die Konventionen in ein von der behandelter Paket NameBasedActionResolver, z.B 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");
        }
    }
    
  • Oder fügen Sie a hinzu @UrlBinding zu Ihrer Aktion, um die Bindung explizit zu konfigurieren:

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

Andere Tipps

WEB-INF ist ein spezielles Verzeichnis, und sein Inhalt ist für den Kunden nicht zugänglich. (Es macht Sinn - Sie möchten nicht, dass der Kunde Ihre herunterladen kann web.xml oder Ihre .class Dateien.)

Sie müssen die JSP -Dateien außerhalb von verschieben WEB-INF.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top