原文在这里 http://groups.google.com/group/Google-Web-Toolkit/msg/ae249ea67c2c3435?pli=1
记录在这里是方便以后可以很容易找到
/**
*
*/
package com.gwt.web.client
.generator;
import java.util.Map;
/**
* @author
*
*/
public interface PropertyMap extends Map{
}
/**
*
*/
package com.gwt.web.server
.generator;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.google.gwt.core.ext.Generator;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
import com.google.gwt.user.rebind.SourceWriter;
/**
* @author
*
*/
public class PropertyMapGenerator extends Generator {
private static final Logger log = Logger
.getLogger(PropertyMapGenerator.class.getCanonicalName());
private String className;
private String typeName;
private String packageName;
/*
* (non-Javadoc)
*
* @see
* com.google.gwt.core.ext.Generator#generate(com.google.gwt.core.ext.TreeLogger
* , com.google.gwt.core.ext.GeneratorContext, java.lang.String)
*/
@Override
public String generate(TreeLogger logger, GeneratorContext context,
String typeName) throws UnableToCompleteException {
log.log(Level.FINE, "generate() called with [" + typeName + "].");
this.typeName = typeName;
TypeOracle typeOracle = context.getTypeOracle();
try {
JClassType classType = typeOracle.getType(typeName);
packageName = classType.getPackage().getName();
className = classType.getSimpleSourceName() + "Wrapper";
generateClass(logger, context);
} catch (Exception ex) {
log.log(Level.SEVERE, "Failed due to [" + ex.getMessage() + "]", ex);
}
return packageName + "." + className;
}
private void generateClass(TreeLogger logger, GeneratorContext context) {
PrintWriter writer = context.tryCreate(logger, packageName, className);
if (writer == null) {
// source code already generated, just return;
return;
}
ClassSourceFileComposerFactory composer = new ClassSourceFileComposerFactory(
packageName, className);
composer.setSuperclass("java.util.HashMap");
SourceWriter sourceWriter = composer
.createSourceWriter(context, writer);
generateConstructor(sourceWriter);
sourceWriter.outdent();
sourceWriter.println("}");
context.commit(logger, writer);
}
private void generateConstructor(SourceWriter sourceWriter) {
// init resource bundle
ResourceBundle bundle = ResourceBundle.getBundle(typeName);
// start constructor source generation
sourceWriter.println("public " + className + "() { ");
sourceWriter.indent();
sourceWriter.println("super();");
// add statements to pub key/value pairs from the resrouce bundle
for (Enumeration<String> keys = bundle.getKeys(); keys
.hasMoreElements();) {
String key = keys.nextElement();
sourceWriter.println("put(\"" + Generator.escape(key) + "\", \""
+ bundle.getString(key) + "\");");
}
// end constructor source generation
sourceWriter.outdent();
sourceWriter.println("}");
}
}
在module.xml 文件里
<generate-with class="com.gwt.web.server.generator.PropertyMapGenerator">
<when-type-assignable class="com.gwt.web.client.generator.PropertyMap" />
</generate-with>
如何使用
package com.gwt.web.client.resource;
import com.gwt.web.client.generator.PropertyMap;
/**
* @author
*
*/
public interface MyPropertyMap extends PropertyMap {
}
同一package下面的同名property文件的内容
message = Hello, World;
Map properties = GWT.create(MyPropertyMap.class);
//这里如果试图使用propertymap运行时会出错。如果在设置superclass的时候设置为PropertyMap,编译会出错:
11:01:22.273 [ERROR] [gwt_start] Line 3: The type PropertyMap cannot be the superclass of MyPropertyMapWrapper; a superclass must be a class
。 在这里消除这中诡异的和java语法不一致的方法是不适用PropertyMap,这个只是为了方便说明。另外一个方式应该可以通过从hashmap继承,而不是通过interface。
分享到:
相关推荐
gwt-api-generator gwt-api-generator是一种工具,用于为作为输入提供JavaScript库生成GWT Java API,前提是它们的API用JSDoc注释修饰。 当前,生成器仅支持以Polymer 1.0语法编写的Web组件。 将来可能会添加对...
I found a number of GWT best practices apps focusing on one or maybe two GWT components. This is my attempt to add all the major GWT best practices. Feel free to download the source and run it. It's ...
"generator:包装器生成器"这个项目,专门用于创建Highcharts库的GWT(Google Web Toolkit)包装器。Highcharts是一个流行的JavaScript库,用于创建高质量的数据可视化图表,如折线图、柱状图、饼图等。而GWT则是一个...
org.liveSense.service.thumbnailGenerator.zip,livesense缩略图生成器服务和observer livesense缩略图生成器服务和observer
这个插件特别适用于那些使用Apache Thrift且需要将Thrift定义的结构转换为POJO格式的情况,如在GWT(Google Web Toolkit)项目中,GWT是一个用于构建富互联网应用程序的框架,它要求服务器端数据模型为POJO,以便在...
您可以使用jsinterop_generator规则来生成Java代码。 您需要将此存储库作为外部依赖项添加到WORKSPACE文件中new_http_archive( name = "com_google_jsinterop_generator", url=...
在描述中提到的GWT(Google Web Toolkit)是一个用于构建富互联网应用(RIA)的开放源代码开发工具,允许开发者使用Java语言编写客户端的Web应用。 2. **控制层(Control Layer)**:这部分负责处理用户的输入和...
5. **代码生成器(Code Generator)**:将优化后的中间代码转换为目标机器语言。 **Javacc简介** Javacc是基于Java的解析器生成器,它使用JavaCC工具生成Java源代码,这些源代码可以解析特定的语言或格式。用户通过...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
在数据支持层中,我们可以看到领域背景、TagedGWT、GWT、RUCM四个基本数据结构,这些数据结构是其他层的基础,提供了基本的数据支持。这些数据结构是系统的基石,其他层面都依赖于这些数据结构。 从活动图的角度来...
**Google Web Toolkit (GWT)** - **简介**:由Google推出的框架,支持使用Java语言进行Ajax应用的开发,降低了Ajax应用开发的难度。 - **应用场景**:适合那些熟悉Java语言且希望利用Java的强类型特点来开发Web...
描述中提到了响应层、功能支持层和数据支持层的具体模块映射,如GWT导入器、领域背景导入和RUCM Generator等,都需要在代码中找到相应的实现。 组件图的一致性检查则需要确认每个组件在代码中被正确实现,并且调用...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...