2009-04-07 10 views
5

Estoy trabajando con el libro Stripes de Fred Daoud e intentando convertir la aplicación Hello World para usar URL amigables, ya que no soy un gran fanático de las correlaciones basadas en sufijos como http://localhost:8080/getting_started/Hello.action.Convirtiendo una aplicación Stripes para usar Friendly URLs

Aquí está el antes ...

index.jsp:

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

web.xml:

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

y no tengo en mi UrlBinding HelloActionBean. Tengo el ejemplo del libro funcionando.

Me pregunto si los ejemplos del libro pueden adaptarse a una versión anterior de Stripes, ya que he descargado 1.5.1 y mi web.xml define StripesFilter y StripesDispatcher mientras que he visto un DynamicMappingFilter utilizado en otro lugar, p. en this article por Fred en TheServerSide.

De todos modos, me hicieron los siguientes cambios:

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 
{ 

Sin embargo cuando intento cargar la aplicación t ediante http://localhost:8080/getting_started veo esto:

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) 

y si puedo acceder a él a través http://localhost:8080/getting_started/hello el servidor parece ir en un bucle lanzar una excepción tras otro.

Cualquier sugerencia apreciada - gracias.

Respuesta

6

He estado probando algunas otras cosas y tengo trabajo ...

que eliminan las definiciones de servlet DispatcherServlet y servlet-mapping existentes en web.xml y reemplazado con el DynamicMappingFilter.

Como bonificación, para cambiar la forma en que se pasan los eventos de enlace, de modo que, p.

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

convierte

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

cambio del UrlBinding en el ActionBean a:

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

No funcionó para mí basta con sustituir el servlet Dispatcher con la DynamicMappingFilter (Tengo una mensaje de error acerca de DynamicMappingFilter solo funciona en conjunto con StripesFilter). Así que tengo dos filtros y una asignación de filtro configurados en mi web.xml ahora:

<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>