2009-04-07 9 views
5

Je travaille sur le livre de Fred Daoud's Stripes et essaye de convertir l'application Hello World pour utiliser des URL conviviales, car je ne suis pas un grand fan des mappages basés sur suffix comme http://localhost:8080/getting_started/Hello.action.Conversion d'une application Stripes pour utiliser les URLs amies

Voici le avant ...

index.jsp:

<jsp:forward page="/Hello.action"/> 

web.xml:

<servlet-mapping> 
    <servlet-name>DispatcherServlet</servlet-name> 
    <url-pattern>*.action</url-pattern> 
</servlet-mapping> 

et je ne UrlBinding sur mon HelloActionBean. J'ai l'exemple du livre qui fonctionne. Je me demande si les exemples de livre peuvent convenir à une version antérieure de Stripes, car j'ai téléchargé 1.5.1 et mon web.xml définit StripesFilter et StripesDispatcher alors que j'ai vu un DynamicMappingFilter utilisé ailleurs, par exemple. dans this article par Fred sur TheServerSide.

Quoi qu'il en soit, je fait les modifications suivantes:

index.jsp:

<jsp:forward page="/hello"/> 

web.xml:

<servlet-mapping> 
    <servlet-name>DispatcherServlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

HelloActionBean.java:

**@UrlBinding("/hello")** 
public class HelloActionBean implements ActionBean 
{ 

Cependant , lorsque j'essaie de charger l'application hrough http://localhost:8080/getting_started Je vois ceci:

net.sourceforge.stripes.exception.ActionBeanNotFoundException: Could not locate an ActionBean that is bound to the URL [/]. Commons reasons for this include mis-matched URLs and forgetting to implement ActionBean in your class. Registered ActionBeans are: {/hello=class stripesbook.action.HelloActionBean, /controller/DefaultView.action=class net.sourceforge.stripes.controller.DefaultViewActionBean, /hello/=class stripesbook.action.HelloActionBean, /controller/DefaultView.action/=class net.sourceforge.stripes.controller.DefaultViewActionBean} 
    at net.sourceforge.stripes.controller.AnnotatedClassActionResolver.getActionBean(AnnotatedClassActionResolver.java:341) 

et si je y accède par http://localhost:8080/getting_started/hello le serveur semble aller dans une boucle lancer une exception après l'autre.

Toute suggestion appréciée - merci.

Répondre

6

J'ai essayé sur quelques autres choses et ai fonctionner ...

J'ai enlevé le servlet DispatcherServlet existants et définitions servlet-mapping dans web.xml et remplacé par le DynamicMappingFilter.

En prime, pour changer la manière dont les événements de liaison sont passés, de sorte que par ex.

http://localhost:8080/getting_started/hello?randomDate= 

devient

http://localhost:8080/getting_started/hello/randomDate 

changer la UrlBinding sur le ActionBean à:

@UrlBinding("/hello/{$event}") 
1

Il ne fonctionne pas pour moi de remplacer tout le servlet Dispatcher avec le DynamicMappingFilter (je suis un message d'erreur à propos de DynamicMappingFilter ne fonctionne qu'avec StripesFilter). J'ai donc deux filtres et un filtre-mapping configurés dans mon web.xml maintenant:

<filter> 
    <display-name>Stripes Filter</display-name> 
    <filter-name>StripesFilter</filter-name> 
    <filter-class>net.sourceforge.stripes.controller.StripesFilter</filter-class> 
    <init-param> 
     <param-name>ActionResolver.Packages</param-name> 
     <param-value>com.package.myactions.package</param-value> 
    </init-param> 
</filter> 

<filter> 
    <description>Dynamically maps URLs to ActionBeans.</description> 
    <display-name>Stripes Dynamic Mapping Filter</display-name> 
    <filter-name>DynamicMappingFilter</filter-name> 
    <filter-class> 
     net.sourceforge.stripes.controller.DynamicMappingFilter 
    </filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>DynamicMappingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
</filter-mapping> 
Questions connexes