Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT应用程序无法从我的RequestContext接口中找到匹配的方法_Java_Gwt_Requestfactory - Fatal编程技术网

Java GWT应用程序无法从我的RequestContext接口中找到匹配的方法

Java GWT应用程序无法从我的RequestContext接口中找到匹配的方法,java,gwt,requestfactory,Java,Gwt,Requestfactory,你能告诉我我有什么问题吗?我有GWT RequestContext和其中的一些方法,还有一些服务类和该方法实现。在开发模式下运行时,RequestContext对象未通过验证 以下是RequestContext接口: @Service(value = CorporateAccountService.class, locator = CorporateAccountServiceLocator.class) public interface CorporateAccountServiceRequ

你能告诉我我有什么问题吗?我有GWT RequestContext和其中的一些方法,还有一些服务类和该方法实现。在开发模式下运行时,RequestContext对象未通过验证

以下是RequestContext接口:

@Service(value = CorporateAccountService.class, locator = CorporateAccountServiceLocator.class)

public interface CorporateAccountServiceRequest extends RequestContext {
  Request<List<CorporateAccountProxy>> findAllCorporateAccounts();
  Request<CorporateAccountProxy> findCorporateAccount(Long id);
  InstanceRequest<CorporateAccountProxy, Void> persist();
  InstanceRequest<CorporateAccountProxy, Void> remove();
}
在我的RequestContext中定义的persist(CorporateAccount-corpAcc)和remove(CorporateAccount-corpAcc)方法存在一些问题,但我正在实现它们


提前谢谢你,我感谢你的帮助

您应该仔细阅读日志,它们提供了大量信息:

在CorporateAccountServiceRequest请求上下文中,您具有以下签名:

InstanceRequest<CorporateAccountProxy, Void> remove();
这些方法必须匹配,因为CorporateAccountServiceRequest是客户端服务的代理(表示接口)。如果他们不匹配,那就不好了。 我猜其他的日志也和这个一样,所以继续阅读。。。 要更正此问题,您应该:

  • 尝试更改方法,使它们匹配
  • 或者,如果您想将实体实现为活动记录:这些实体封装了自己的peristence逻辑(就像您使用remove()所做的那样),那么您应该将所有与持久性相关的逻辑放在实体类本身中。但您必须确保@serie注释以实体类而不是服务实现为目标
  • 在处理REquestFactory时,还应检查以下一些规则:

  • 确保实体类具有@version和@Id列及其各自的getter/setter。requestFactory使用版本列来检查客户端上显示的状态是否与服务器上显示的状态相同
  • 确保在服务中定义一个名为findXXX(长id)静态方法,其中XXX是实体的名称。在你的情况下,我想它必须是stg式的

    公共静态公司账户FindCorporateCount(长id)

  • 不要失去信心;-)


  • 我希望这有助于……

    谢谢,我解决了这个问题。它应该是这样的:请求持久化(CorporateAccountProxy accountProxy);请求删除(CorporateAccountProxy accountProxy);而不是:InstanceRequest persist();InstanceRequest移除();我不记得InstanceRequests仅在实体本身中实现持久性逻辑时使用。@user791195您应该接受此答案或创建一个新答案。您应该添加更多标记。这使问题更加明显
    Jun 9, 2011 7:32:10 PM com.dms.admin.shared.CorporateAccountServiceRequest com.google.web.bindery.requestfactory.shared.InstanceRequest remove()
    SEVERE: Could not find matching method in com.dms.admin.server.CorporateAccountService.
    Possible matches:
        void remove(com.dms.admin.server.domain.CorporateAccount )
    
    Jun 9, 2011 7:32:10 PM com.dms.admin.shared.CorporateAccountServiceRequest   com.google.web.bindery.requestfactory.shared.InstanceRequest persist()
    SEVERE: Could not find matching method in com.dms.admin.server.CorporateAccountService.
    Possible matches:
        void persist(com.dms.admin.server.domain.CorporateAccount )
    
    Jun 9, 2011 7:32:10 PM com.google.web.bindery.requestfactory.server.ServiceLayerDecorator die
    SEVERE: The RequestContext type com.dms.admin.shared.CorporateAccountServiceRequest did     not pass validation
    Jun 9, 2011 7:32:10 PM  com.google.web.bindery.requestfactory.server.RequestFactoryServlet doPost
    SEVERE: Unexpected error
    com.google.web.bindery.requestfactory.server.UnexpectedException: The RequestContext  type com.dms.admin.shared.CorporateAccountServiceRequest did not pass validation
    
    InstanceRequest<CorporateAccountProxy, Void> remove();
    
    public void remove(CorporateAccount corporateAccount)