extConverter, 是针对com.google.appengine.api.datastore.Text对象的转换器,Text是GAE的存储中,大文本内容的保存对象,在业务中很常用。先来看看TextConverter大的代码:
package your.servlet.pkg;
import com.google.appengine.api.datastore.Text;
import ognl.DefaultTypeConverter;
import java.util.Map;
public class TextConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Map map, Object o, Class toType) {
if (toType == Text.class) {
String value = ((String[]) o)[0];
return new Text(value);
} else if (toType == String.class) {
Text text = (Text) o;
return text.getValue();
}
return null;
}
}
TextConverter的作用主要是用于在WEB页面中,直接显示存储对象中的大文本内容。
另外一个是KeyConverter,是对com.google.appengine.api.datastore.Key对象的转换器,Key是GAE中三种主键(Long,String,Key)的一种,在接收请求数据以及页面显示的时候,会经常用到。直接看代码:
package your.servlet.pkg;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import ognl.DefaultTypeConverter;
import java.util.Map;
public class KeyConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Map map, Object o, Class toType) {
if (toType == Key.class) {
String s = ((String[]) o)[0];
return KeyFactory.stringToKey(s);
} else if (toType == String.class) {
Key k = (Key) o;
return KeyFactory.keyToString(k);
}
return null;
}
}
在源代码的根目录,创建xwork-conversion.properties文件,内容如下:
com.google.appengine.api.datastore.Text=your.servlet.pkg.TextConverter
com.google.appengine.api.datastore.Key=your.servlet.pkg.KeyConverter
上面的工作都完成以后,就可以在你的Action里面直接使用Key类型的类变量,无需手工去做String和Key之间的转换!
Convention Plugin不能使用
Struts2里面,最常用的Plugin应该是Convertion了,"零配置"即减少了写配置文件的麻烦,代码的组织结构看起来也清晰很多。
但是在GAE里面,无法读取文件系统,目前的Convertion版本还无法正常工作,非常可惜。不过建议你的GAE应用中,Action和JSP文件,还是按照Convertion Plugin的组织方式来存放,一方面有利于后面的升级和迁移工作,另一方面也让你的应用的文件看起来更清晰。 |