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:重新绑定结果必须是类_Java_Gwt - Fatal编程技术网

Java GWT:重新绑定结果必须是类

Java GWT:重新绑定结果必须是类,java,gwt,Java,Gwt,我已经编写了一个生成器类,它为我们的DTO创建了一个简单的适配器。基本上,生成的代码所做的就是查看DTO的所有方法以找到getter,并创建一个getProperty(String)方法以根据属性名称检索属性 在编译器尝试编译GWT.create()语句之前,一切似乎都正常,然后我得到了“必须是类”错误 感谢您的帮助 下面有很多东西来解释这个问题 谢谢 埃德 这是my.gwt.xml的一部分: <generate-with class="com.kn.tls.acsuk.mobile.ge

我已经编写了一个生成器类,它为我们的DTO创建了一个简单的适配器。基本上,生成的代码所做的就是查看DTO的所有方法以找到getter,并创建一个getProperty(String)方法以根据属性名称检索属性

在编译器尝试编译GWT.create()语句之前,一切似乎都正常,然后我得到了“必须是类”错误

感谢您的帮助

下面有很多东西来解释这个问题

谢谢

埃德

这是my.gwt.xml的一部分:

<generate-with class="com.kn.tls.acsuk.mobile.generator.ModelAdaptorFactoryGenerator" >
    <when-type-is class="com.kn.tls.acsuk.mobile.generator.ModelAdaptorFactory"/>
</generate-with> 
这是我的生成器生成的代码:

package com.kn.tls.acsuk.mobile.generator;

import com.kn.tls.acsuk.mobile.generator.ModelAdaptor;
import com.kn.tls.acsuk.mobile.dto.BaseMobileDTO;
import com.kn.tls.acsuk.mobile.dto.MobileAuditDetailDTO;
import com.kn.tls.acsuk.mobile.dto.MobileAuditHeaderDTO;
import com.kn.tls.acsuk.mobile.dto.MobileUserDTO;
import com.kn.tls.acsuk.mobile.dto.MobileAuditHeaderCommentDTO;

public class ModelAdaptorFactoryImpl implements ModelAdaptorFactory {
  class MobileAuditDetailDTOModelAdaptor implements ModelAdaptor
  {
    private MobileAuditDetailDTO wrapped;

    @Override
    public String getProperty(String propertyName)
    {
      switch (propertyName.toUpperCase())
      {
        case "TOTALASSETQUANTITY":
          return wrapped.getTotalAssetQuantity().toString();

        case "ONDISPLAYQUANTITY":
          return wrapped.getOnDisplayQuantity().toString();

        case "OFFSITEASSETQUANTITY":
          return wrapped.getOffsiteAssetQuantity().toString();

        case "OUTBOUNDTRANSITQUANTITY":
          return wrapped.getOutboundTransitQuantity().toString();

        case "INBOUNDTRANSITQUANTITY":
          return wrapped.getInboundTransitQuantity().toString();

        case "INACCESSIBLEASSETQUANTITY":
          return wrapped.getInaccessibleAssetQuantity().toString();

        case "DAMAGEDASSETQUANTITY":
          return wrapped.getDamagedAssetQuantity().toString();

        case "PACKEDASSETQUANTITY":
          return wrapped.getPackedAssetQuantity().toString();

        case "EMPTYASSETQUANTITY":
          return wrapped.getEmptyAssetQuantity().toString();

        case "ASSETAUDITHEADER":
          return wrapped.getAssetAuditHeader().toString();

        case "STOREFULLQUANTITY":
          return wrapped.getStoreFullQuantity().toString();

        case "STOREEMPTYQUANTITY":
          return wrapped.getStoreEmptyQuantity().toString();

        case "STOREOTHERQUANTITY":
          return wrapped.getStoreOtherQuantity().toString();

        case "EMPTYCLEANQUANTITY":
          return wrapped.getEmptyCleanQuantity().toString();

        case "EMPTYDIRTYQUANTITY":
          return wrapped.getEmptyDirtyQuantity().toString();

        case "ASSETTYPE":
          return wrapped.getAssetType().toString();

        case "ID":
          return wrapped.getId().toString();

        case "CLASS":
          return wrapped.getClass().toString();

      }
      return "";
    }

    @Override
    public void setWrapped(BaseMobileDTO model)
    {
      this.wrapped = (MobileAuditDetailDTO) model;
    }
  }
  class MobileAuditHeaderDTOModelAdaptor implements ModelAdaptor
  {
    private MobileAuditHeaderDTO wrapped;

    @Override
    public String getProperty(String propertyName)
    {
      switch (propertyName.toUpperCase())
      {
        case "LOCATION":
          return wrapped.getLocation().toString();

        case "SCHEDULEDASSETAUDITDATE":
          return wrapped.getScheduledAssetAuditDate().toString();

        case "SCHEDULEDASSETAUDITOR":
          return wrapped.getScheduledAssetAuditor().toString();

        case "ACTUALASSETAUDITDATE":
          return wrapped.getActualAssetAuditDate().toString();

        case "ACTUALASSETAUDITOR":
          return wrapped.getActualAssetAuditor().toString();

        case "ASSETAUDITSTATUS":
          return wrapped.getAssetAuditStatus().toString();

        case "ASSETAUDITTYPE":
          return wrapped.getAssetAuditType().toString();

        case "FIRSTCOMMUNICATIONSENTDATE":
          return wrapped.getFirstCommunicationSentDate().toString();

        case "FINALCOMMUNICATIONSENTDATE":
          return wrapped.getFinalCommunicationSentDate().toString();

        case "SECONDCOMMUNICATIONSENTDATE":
          return wrapped.getSecondCommunicationSentDate().toString();

        case "COMMENTS":
          return wrapped.getComments().toString();

        case "DETAILS":
          return wrapped.getDetails().toString();

        case "ID":
          return wrapped.getId().toString();

        case "CLASS":
          return wrapped.getClass().toString();

      }
      return "";
    }

    @Override
    public void setWrapped(BaseMobileDTO model)
    {
      this.wrapped = (MobileAuditHeaderDTO) model;
    }
  }
  class MobileUserDTOModelAdaptor implements ModelAdaptor
  {
    private MobileUserDTO wrapped;

    @Override
    public String getProperty(String propertyName)
    {
      switch (propertyName.toUpperCase())
      {
        case "NAME":
          return wrapped.getName().toString();

        case "CODE":
          return wrapped.getCode().toString();

        case "ID":
          return wrapped.getId().toString();

        case "CLASS":
          return wrapped.getClass().toString();

      }
      return "";
    }

    @Override
    public void setWrapped(BaseMobileDTO model)
    {
      this.wrapped = (MobileUserDTO) model;
    }
  }
  class MobileAuditHeaderCommentDTOModelAdaptor implements ModelAdaptor
  {
    private MobileAuditHeaderCommentDTO wrapped;

    @Override
    public String getProperty(String propertyName)
    {
      switch (propertyName.toUpperCase())
      {
        case "COMMENT":
          return wrapped.getComment().toString();

        case "ASSETAUDITHEADER":
          return wrapped.getAssetAuditHeader().toString();

        case "ID":
          return wrapped.getId().toString();

        case "CLASS":
          return wrapped.getClass().toString();

      }
      return "";
    }

    @Override
    public void setWrapped(BaseMobileDTO model)
    {
      this.wrapped = (MobileAuditHeaderCommentDTO) model;
    }
  }

  public ModelAdaptor createAdaptor(BaseMobileDTO dto)
  {
    ModelAdaptor adaptor = null;
    switch (dto.getClass().getSimpleName().toUpperCase())
    {
      case "MOBILEAUDITDETAILDTO":
        adaptor = new MobileAuditDetailDTOModelAdaptor();
        adaptor.setWrapped(dto);
        break;
      case "MOBILEAUDITHEADERDTO":
        adaptor = new MobileAuditHeaderDTOModelAdaptor();
        adaptor.setWrapped(dto);
        break;
      case "MOBILEUSERDTO":
        adaptor = new MobileUserDTOModelAdaptor();
        adaptor.setWrapped(dto);
        break;
      case "MOBILEAUDITHEADERCOMMENTDTO":
        adaptor = new MobileAuditHeaderCommentDTOModelAdaptor();
        adaptor.setWrapped(dto);
        break;
    }
    return adaptor;
  }
}

创建RebindResult类时,应该使用生成类的限定源名称,而不是接口的限定源名称

我期待这样的事情:

return new RebindResult(RebindMode.USE_ALL_NEW_WITH_NO_CACHING,
                        packageName + "." + generatedClassName);
其中generatedClassName是生成的类的名称


看起来您使用的是接口的名称。

这不正确。GWT.create()需要传入您在.GWT.xml文件中配置的任何内容(在我的示例中,它应该查找ModelAdapterFactory)。generate()方法需要返回字符串,而不是重新绑定的结果。这取决于您如何实现生成器。使用“generateIncrementally”将返回重新绑定结果。在使用SDM的上下文中使用generate方法不是最好的主意。
package com.kn.tls.acsuk.mobile.generator;

import com.kn.tls.acsuk.mobile.generator.ModelAdaptor;
import com.kn.tls.acsuk.mobile.dto.BaseMobileDTO;
import com.kn.tls.acsuk.mobile.dto.MobileAuditDetailDTO;
import com.kn.tls.acsuk.mobile.dto.MobileAuditHeaderDTO;
import com.kn.tls.acsuk.mobile.dto.MobileUserDTO;
import com.kn.tls.acsuk.mobile.dto.MobileAuditHeaderCommentDTO;

public class ModelAdaptorFactoryImpl implements ModelAdaptorFactory {
  class MobileAuditDetailDTOModelAdaptor implements ModelAdaptor
  {
    private MobileAuditDetailDTO wrapped;

    @Override
    public String getProperty(String propertyName)
    {
      switch (propertyName.toUpperCase())
      {
        case "TOTALASSETQUANTITY":
          return wrapped.getTotalAssetQuantity().toString();

        case "ONDISPLAYQUANTITY":
          return wrapped.getOnDisplayQuantity().toString();

        case "OFFSITEASSETQUANTITY":
          return wrapped.getOffsiteAssetQuantity().toString();

        case "OUTBOUNDTRANSITQUANTITY":
          return wrapped.getOutboundTransitQuantity().toString();

        case "INBOUNDTRANSITQUANTITY":
          return wrapped.getInboundTransitQuantity().toString();

        case "INACCESSIBLEASSETQUANTITY":
          return wrapped.getInaccessibleAssetQuantity().toString();

        case "DAMAGEDASSETQUANTITY":
          return wrapped.getDamagedAssetQuantity().toString();

        case "PACKEDASSETQUANTITY":
          return wrapped.getPackedAssetQuantity().toString();

        case "EMPTYASSETQUANTITY":
          return wrapped.getEmptyAssetQuantity().toString();

        case "ASSETAUDITHEADER":
          return wrapped.getAssetAuditHeader().toString();

        case "STOREFULLQUANTITY":
          return wrapped.getStoreFullQuantity().toString();

        case "STOREEMPTYQUANTITY":
          return wrapped.getStoreEmptyQuantity().toString();

        case "STOREOTHERQUANTITY":
          return wrapped.getStoreOtherQuantity().toString();

        case "EMPTYCLEANQUANTITY":
          return wrapped.getEmptyCleanQuantity().toString();

        case "EMPTYDIRTYQUANTITY":
          return wrapped.getEmptyDirtyQuantity().toString();

        case "ASSETTYPE":
          return wrapped.getAssetType().toString();

        case "ID":
          return wrapped.getId().toString();

        case "CLASS":
          return wrapped.getClass().toString();

      }
      return "";
    }

    @Override
    public void setWrapped(BaseMobileDTO model)
    {
      this.wrapped = (MobileAuditDetailDTO) model;
    }
  }
  class MobileAuditHeaderDTOModelAdaptor implements ModelAdaptor
  {
    private MobileAuditHeaderDTO wrapped;

    @Override
    public String getProperty(String propertyName)
    {
      switch (propertyName.toUpperCase())
      {
        case "LOCATION":
          return wrapped.getLocation().toString();

        case "SCHEDULEDASSETAUDITDATE":
          return wrapped.getScheduledAssetAuditDate().toString();

        case "SCHEDULEDASSETAUDITOR":
          return wrapped.getScheduledAssetAuditor().toString();

        case "ACTUALASSETAUDITDATE":
          return wrapped.getActualAssetAuditDate().toString();

        case "ACTUALASSETAUDITOR":
          return wrapped.getActualAssetAuditor().toString();

        case "ASSETAUDITSTATUS":
          return wrapped.getAssetAuditStatus().toString();

        case "ASSETAUDITTYPE":
          return wrapped.getAssetAuditType().toString();

        case "FIRSTCOMMUNICATIONSENTDATE":
          return wrapped.getFirstCommunicationSentDate().toString();

        case "FINALCOMMUNICATIONSENTDATE":
          return wrapped.getFinalCommunicationSentDate().toString();

        case "SECONDCOMMUNICATIONSENTDATE":
          return wrapped.getSecondCommunicationSentDate().toString();

        case "COMMENTS":
          return wrapped.getComments().toString();

        case "DETAILS":
          return wrapped.getDetails().toString();

        case "ID":
          return wrapped.getId().toString();

        case "CLASS":
          return wrapped.getClass().toString();

      }
      return "";
    }

    @Override
    public void setWrapped(BaseMobileDTO model)
    {
      this.wrapped = (MobileAuditHeaderDTO) model;
    }
  }
  class MobileUserDTOModelAdaptor implements ModelAdaptor
  {
    private MobileUserDTO wrapped;

    @Override
    public String getProperty(String propertyName)
    {
      switch (propertyName.toUpperCase())
      {
        case "NAME":
          return wrapped.getName().toString();

        case "CODE":
          return wrapped.getCode().toString();

        case "ID":
          return wrapped.getId().toString();

        case "CLASS":
          return wrapped.getClass().toString();

      }
      return "";
    }

    @Override
    public void setWrapped(BaseMobileDTO model)
    {
      this.wrapped = (MobileUserDTO) model;
    }
  }
  class MobileAuditHeaderCommentDTOModelAdaptor implements ModelAdaptor
  {
    private MobileAuditHeaderCommentDTO wrapped;

    @Override
    public String getProperty(String propertyName)
    {
      switch (propertyName.toUpperCase())
      {
        case "COMMENT":
          return wrapped.getComment().toString();

        case "ASSETAUDITHEADER":
          return wrapped.getAssetAuditHeader().toString();

        case "ID":
          return wrapped.getId().toString();

        case "CLASS":
          return wrapped.getClass().toString();

      }
      return "";
    }

    @Override
    public void setWrapped(BaseMobileDTO model)
    {
      this.wrapped = (MobileAuditHeaderCommentDTO) model;
    }
  }

  public ModelAdaptor createAdaptor(BaseMobileDTO dto)
  {
    ModelAdaptor adaptor = null;
    switch (dto.getClass().getSimpleName().toUpperCase())
    {
      case "MOBILEAUDITDETAILDTO":
        adaptor = new MobileAuditDetailDTOModelAdaptor();
        adaptor.setWrapped(dto);
        break;
      case "MOBILEAUDITHEADERDTO":
        adaptor = new MobileAuditHeaderDTOModelAdaptor();
        adaptor.setWrapped(dto);
        break;
      case "MOBILEUSERDTO":
        adaptor = new MobileUserDTOModelAdaptor();
        adaptor.setWrapped(dto);
        break;
      case "MOBILEAUDITHEADERCOMMENTDTO":
        adaptor = new MobileAuditHeaderCommentDTOModelAdaptor();
        adaptor.setWrapped(dto);
        break;
    }
    return adaptor;
  }
}
return new RebindResult(RebindMode.USE_ALL_NEW_WITH_NO_CACHING,
                        packageName + "." + generatedClassName);