Domanda

Sto lavorando al libro Stripes di Fred Daoud e sto cercando di convertire l'applicazione Hello World per utilizzare URL amichevoli, poiché non sono un grande fan delle mappature basate su suffissi come http://localhost:8080/getting_started/Hello.action.

Ecco il prima...

indice.jsp:

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

web.xml:

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

e non ho UrlBinding sul mio HelloActionBean.Ho l'esempio del libro funzionante.

Mi chiedo se gli esempi del libro possano essere adatti a una versione precedente di Stripes, poiché ho scaricato la 1.5.1 e il mio web.xml definisce StripesFilter e StripesDispatcher mentre ho visto un DynamicMappingFilter utilizzato altrove, ad es.In Questo articolo da Fred su TheServerSide.

Comunque ho apportato le seguenti modifiche:

indice.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 
{

Tuttavia, quando provo a caricare l'app http://localhost:8080/getting_started Lo vedo:

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)

e se accedo tramite http://localhost:8080/getting_started/ciao il server sembra entrare in un ciclo lanciando un'eccezione dopo l'altra.

Eventuali suggerimenti apprezzati - grazie.

È stato utile?

Soluzione

Ho provato alcune altre cose e ho funzionato...

Ho rimosso il servlet DispatcherServlet esistente e le definizioni di mappatura dei servlet in web.xml e li ho sostituiti con DynamicMappingFilter.

Come bonus, per cambiare il modo in cui vengono passati gli eventi di collegamento, in modo che ad es.

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

diventa

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

modificare l'UrlBinding su ActionBean in:

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

Altri suggerimenti

Non ha funzionato per me, per sostituire solo il servlet Dispatcher con la DynamicMappingFilter (ho ricevuto un messaggio di errore circa il DynamicMappingFilter funziona solo in combinazione con lo StripesFilter). Così ho due filtri e un filtro di mappatura configurati nel mio web.xml ora:

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top