Conversion d'une application Stripes utiliser URLs
Question
Je travaille dans le livre de Fred Daoud Stripes et d'essayer de convertir l'application Bonjour tout le monde à utiliser des URL amicales, comme je ne suis pas un grand fan des applications à base de suffixe comme http: // localhost:. 8080 / Getting_Started / Hello.action
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. Je l'exemple du livre de travail.
Je me demande si les exemples du livre peuvent convenir à une version antérieure de Stripes, comme je l'ai téléchargé 1.5.1 et mon web.xml définit le StripesFilter et StripesDispatcher alors que je l'ai vu un DynamicMappingFilter utilisé ailleurs, par exemple cet article par Fred sur TheServerSide.
Quoi qu'il en soit, j'ai 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 je tente de charger l'application par http: // localhost: 8080 / Getting_Started Je vois cela :
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 / bonjour le serveur semble pour aller dans une boucle lancer une exception après l'autre.
Toutes les suggestions ont apprécié -. Merci
La solution
Je l'ai essayé sur quelques autres choses et obtenu ce travail ...
I enlevé le servlet DispatcherServlet existants et les définitions de mappage de servlet dans web.xml et remplacé par le DynamicMappingFilter.
En prime, pour changer la façon dont les événements de liaison sont passés, de sorte que par exemple
http://localhost:8080/getting_started/hello?randomDate=
devient
http://localhost:8080/getting_started/hello/randomDate
changer le UrlBinding sur le ActionBean à:
@UrlBinding("/hello/{$event}")
Autres conseils
Il ne fonctionne pas pour moi de remplacer tout le servlet Dispatcher avec le DynamicMappingFilter (j'ai reçu un message d'erreur sur le DynamicMappingFilter fonctionne uniquement conjointement avec le 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>