Pergunta

Eu estou trabalhando através do livro das listras de Fred Daoud e tentando converter a aplicação Olá Mundo de usar URLs amigáveis, como eu não sou um grande fã de mapeamentos baseados em sufixo, como http: // localhost:. 8080 / getting_started / Hello.action

Aqui está o antes ...

index.jsp:

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

web.xml:

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

e não tenho UrlBinding no meu HelloActionBean. Eu tenho o exemplo do livro de trabalho.

Eu estou querendo saber se os exemplos do livro podem atender uma versão anterior do Stripes, como eu fiz o download 1.5.1 e meu web.xml define o StripesFilter e StripesDispatcher enquanto eu vi um DynamicMappingFilter usado em outro lugar, por exemplo, em este artigo por Fred em TheServerSide.

De qualquer forma, eu fiz as seguintes alterações:

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 
{

No entanto, quando eu tento carregar o aplicativo através http: // localhost: 8080 / getting_started Eu vejo isso :

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 eu acessá-lo através http: // localhost: 8080 / getting_started / Olá o servidor parece para entrar em um loop jogando uma exceção após o outro.

Todas as sugestões apreciada -. Graças

Foi útil?

Solução

Eu tenho tentado fora algumas outras coisas e tenho que trabalhar ...

Eu removi as definições DispatcherServlet servlet e servlet-mapping existentes no web.xml e substituído pelo DynamicMappingFilter.

Como um bônus, para mudar a maneira como os eventos de ligação são passados, de modo que, por exemplo,

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

se torna

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

mudar o UrlBinding na ActionBean a:

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

Outras dicas

Não funcionou para mim basta substituir o servlet Dispatcher com a DynamicMappingFilter (eu tenho uma mensagem de erro sobre a DynamicMappingFilter só funciona em conjunto com o StripesFilter). Então, eu tenho dois filtros e um filtro de mapeamento configurado no meu web.xml agora:

<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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top