2016-09-15 1 views
0

J'ai une simple classe d'action et de résultat. Gestionnaire pour cette variable incrémenter juste dans l'action et le renvoie dans le résultat. actionL'appel RPC ne fonctionne pas. GUICE + DISPATCH

public class IncrementCounter implements Action<IncrementCounterResult> { 
    private int amount; 

    /** For serialization only. */ 
    public IncrementCounter(){} 

    public IncrementCounter(int amount){ 
     this.amount = amount; 
    } 

    public int getAmount() { 
     return amount; 
    } 
} 

Résultat

public class IncrementCounterResult implements Result { 
    private int amount; 
    private int current; 

    /** For serialization only. */ 
    public IncrementCounterResult(){} 

    public IncrementCounterResult(int amount, int current){ 
     this.amount = amount; 
     this.current = current; 
    } 

    public int getAmount() { 
     return amount; 
    } 

    public int getCurrent() { 
     return current; 
    } 
} 

I ont un module d'action, où i lie l'action sur gestionnaire. ActionsModule

public class ActionsModule extends ActionHandlerModule { 
    @Override 
    protected void configureHandlers() { 
     bindHandler(IncrementCounter.class, IncrementCounterHandler.class); 
    } 
} 

DispatchServletModule

public class DispatcherServletModule extends ServletModule { 
    @Override 
    protected void configureServlets() { 
     serve("/dispatch").with(GuiceStandardDispatchServlet.class); 
    } 
} 

Handler, qui incrémente champ en action et il revient dans le résultat.

public class IncrementCounterHandler implements ActionHandler<IncrementCounter, IncrementCounterResult> { 
    private int current = 0; 


    public Class<IncrementCounter> getActionType() { 
     return IncrementCounter.class; 
    } 


    public IncrementCounterResult execute(IncrementCounter action, ExecutionContext context) throws ActionException { 
     current += action.getAmount(); 
     return new IncrementCounterResult(action.getAmount(), current); 
    } 


    public void rollback(IncrementCounter action, IncrementCounterResult result, ExecutionContext context) throws ActionException { 
     current = result.getCurrent() - result.getAmount(); 
    } 
} 

Et le dernier est auditeur:

public class RpcCommandGuiceConfig extends GuiceServletContextListener { 

    @Override 
    protected Injector getInjector() { 
     return Guice.createInjector(new ServerDispatchModule(), new ActionsModule()); 
    } 
} 

Voici mon web.xml fichier

<?xml version="1.0" encoding="UTF-8"?> 
<web-app> 
    <filter> 
     <filter-name>guiceFilter</filter-name> 
     <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>guiceFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <listener> 
     <listener-class>server.RpcCommandGuiceConfig</listener-class> 
    </listener> 
    <welcome-file-list> 
     <welcome-file>Module.html</welcome-file> 
    </welcome-file-list> 
</web-app> 

j'appelle dispatch.execute lorsque le bouton cliqué. et le code saute dans la section onFailure. J'ai ce dans le journal:

WARN] 404 - POST /Module/dispatch (127.0.0.1) 1380 bytes 
    Request headers 
     Host: 127.0.0.1:8888 
     User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0 
     Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
     Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 
     Accept-Encoding: gzip, deflate 
     X-GWT-Permutation: HostedMode 
     X-GWT-Module-Base: http://127.0.0.1:8888/Module/ 
     Content-Type: text/x-gwt-rpc; charset=utf-8 
     Referer: http://127.0.0.1:8888/Module/Module.html?gwt.codesvr=127.0.0.1:9997 
     Content-Length: 238 
     Connection: keep-alive 
     Pragma: no-cache 
     Cache-Control: no-cache 

Quelqu'un peut-il aider à résoudre ce problème?

... Ici fichier GWT

<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.0//EN" 
     "http://google-web-toolkit.googlecode.com/svn/releases/2.0/distro-source/core/src/gwt-module.dtd"> 
<module> 
    <source path="client"/> 
    <source path="shared"/> 
    <source path="server"/> 
    <inherits name='com.google.gwt.user.User'/> 
    <inherits name="com.mvp4g.Mvp4gModule"/> 
    <inherits name="org.moxieapps.gwt.highcharts.Highcharts"/> 
    <inherits name="net.customware.gwt.dispatch.Dispatch" /> 
    <inherits name="com.google.gwt.inject.Inject" /> 
    <entry-point class='client.Module'/> 
</module> 
+0

je pense avoir un problème avec xml.file. Peut-être que je gâte étiquettes. Mais quand j'ajoute dans server . DistributeurServletModule j'ai une erreur: cette classe n'est pas assignable à 'javax.servlet.Servelt', mais il étend l'importation com.google.inject.servlet.ServletModule ;? Comment sait-il à propos de ce serveur javax.servlet? – Andrew

+0

server.DispatcherServletModule ici est l'erreur n'est pas assignable à 'javax.servlet.Servlet', – Andrew

+0

quelqu'un peut-il aider? je ne peux toujours pas résoudre ce problème ( – Andrew

Répondre

0

Je pense que vous devez préfixer le serve en DispatcherServletModule avec le nom du module. Dans votre cas, il semble que ce soit dans la racine, il est donc le nom du module: Module:

serve("/Module/dispatch").with(GuiceStandardDispatchServlet.class);

+0

vous venez de me sauver la vie) merci beaucoup. J'ai passé toute la journée et je n'ai pas résolu cela, et le matin, vous m'avez aidé. THX – Andrew