Domanda

Ho il seguente Stripes ActionBean:

package myapp;

import net.sourceforge.stripes.action.*;

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

Quando carico /myapp/Welcome.action in un browser, il contenuto di welcome.jsp vengono visualizzati.

Tuttavia, quando mi muovo welcome.jsp a /WEB-INF/jsp/welcome.jsp e modificare l'argomento ForwardResolution per riflettere questo cambiamento, cioè:.

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

ottengo il seguente errore quando carico /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)

E 'necessario effettuare alcuna configurazione speciale, al fine di memorizzare i file JSP nella directory WEB-INF?

È stato utile?

Soluzione

La mia comprensione è la seguente: la vostra WelcomeActionBean in non in un pacchetto ([web, WWW, strisce, azione]) automagically gestita dal NameBasedActionResolver (leggere il javadoc) in modo che sia effettivamente mappato /myapp/Welcome.action (come indicato nel messaggio di errore).

Quindi, quando si richiede /Welcome.action, non c'è alcun ActionBean esistente legata a quella URL e le ricadute resolver per /welcome.jsp (ancora una volta, vedere la NameBasedActionResolver javadoc). E quando si sposta il JSP sotto /WEB-INF/jsp, bene, sei a corto di fortuna e tutto appena viene a mancare.

Per risolvere questo problema, sia:

  • L'accesso alla "destra" (allo stato attuale) URL vincolante cioè /myapp/Welcome.action

  • In alternativa, se si desidera che l'ActionBean per essere associato a /Welcome.action dalle convenzioni, spostarlo in un pacchetto gestito dal NameBasedActionResolver , ad esempio, 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 aggiungere un @UrlBinding alla tua azione per configurare il legame esplicitamente:

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

Altri suggerimenti

WEB-INF è una directory speciale, e il suo contenuto non sono accessibili al cliente. (Ha senso -. Non si vorrebbe il cliente sia in grado di scaricare il web.xml oi file .class)

È necessario spostare i file JSP al di fuori della WEB-INF.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top