GXT 3 XTemplate:自定义格式化程序 - ClassNotFoundException

时间:2014-08-04 11:43:56

标签: java gwt gxt

我正在尝试使用自定义格式化程序将布尔值转换为“是”或“否”并遇到障碍。

我的IDE(Eclipse)没有指出任何错误,但是当我尝试编译时,我收到了

[错误]注释错误:无法解析foobar.client.formatter.YesNoFormatter - 异常:ClassNotFoundException

后面是一些似乎源于此异常的其他异常。我理解ClassNotFoundException是什么意思但是我无法弄清楚为什么我会得到它,因为我的代码显示,YesNoFormatter类位于foobar.client.formatter中,我可以通过

访问它
GWT.log("True: " + YesNoFactory.getFormat().format(Boolean.TRUE);

我正在使用GXT 3.1.0和GWT 2.6.1。

有人知道为什么我会收到这个例外吗?在http://docs.sencha.com/gxt-guides/3/utility/xtemplates/XTemplates.html给出的例子没有提到任何关于这些需要在特定位置的类的东西(据我所知),所以我很茫然。

的EntryPoint:

package foobar.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.sencha.gxt.core.client.XTemplates.FormatterFactories;
import com.sencha.gxt.core.client.XTemplates.FormatterFactory;


public class TestClass implements EntryPoint {

    @FormatterFactories(@FormatterFactory(factory=YesNoFactory.class, name="yesNo"))
    public interface Renderer extends XTemplates {
      @XTemplate(source="yesNo.html")
       SafeHtml render(Boolean b);
    }

    @Override
    public void onModuledLoad() {
      GWT.log("True: " + YesNoFactory.getFormat().format(Boolean.TRUE);
      Renderer r = GWT.create(Renderer.class);

      Window.alert(r.render(true).asString());
    }
}

YESNO:

package foobar.client.formatter;

import com.sencha.gxt.core.client.XTemplates.Formatter;

public class YesNo implements Formatter<Boolean> {
   @Override
   public String format(Boolean data) {
      if (data == null) {
         return null;
      }
      return (data) ? "Yes" : "No";
   }
}

YesNoFactory:

package foobar.client.formatter;

public class YesNoFactory {
   public static YesNo getFormat() {
      return new YesNo();
   }
}
在foobar

<?xml version="1.0 encoding="UTF-8"?>
<module>
   <inherits name='com.google.gwt.user.User'/>
   <inherits name='com.sencha.gxt.GXT'/>

   <entry-point class='foobar.client.TestClass'/>

   <source path='client'/>
</module>

foobar的/客户端/ yesNo.html:

{b:yesNo()}

1 个答案:

答案 0 :(得分:0)

我的格式化程序类(YesNo和YesNoFactory)显然必须位于编译客户端代码之前编译的位置。在我将这些课程移到我的共享课程之后package - 包含客户端和服务器使用的代码的包 - 一切正常。

这在http://docs.sencha.com/gxt-guides/3/utility/xtemplates/XTemplates.html指南的XTemplates部分中并不明显,它似乎没有指定需要定位用于自定义格式化程序的文件的位置。也许这应该是显而易见的,但不是我。