2010年5月18日星期二
GWT编译巨慢
Compiling 12 permutations
Compiling permutation 0...
Compiling permutation 1...
Compiling permutation 2...
Compiling permutation 3...
Compiling permutation 4...
Compiling permutation 5...
Compiling permutation 6...
Compiling permutation 7...
Compiling permutation 8...
Compiling permutation 9...
Compiling permutation 10...
Compiling permutation 11...
Compile of permutations succeeded
Linking into D:\spring\workspace\fusionchart\war\olap.
Link succeeded
Compilation succeeded -- 291.925s
在#.gwt.xml中添加支持Firefox
<!-- User Agent -->
<set-property name="user.agent" value="gecko1_8" />
编译的确变得很快,但IE中果真不好使
Should only call onDetach when the widget is attached to the browser's document
这个异常是在com.google.gwt.user.client.ui.Widget protected void onDetach() 方法抛出的
当页面重新加载或离开页面时会执行这个方法
如果系统没有正常初始化,会有这个异常
郁闷的是No errors in Dev Mode but Compiled localy and deployed to tomcat in errors

GWT.setUncaughtExceptionHandler
这是恼人,加上UncaughtExceptionHandler起码有一丝线索
GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
public void onUncaughtException(Throwable throwable) {
String text = "Uncaught exception: ";
while (throwable != null) {
StackTraceElement[] stackTraceElements = throwable
.getStackTrace();
text += throwable.toString() + "\n";
for (int i = 0; i < stackTraceElements.length; i++) {
text += " at " + stackTraceElements[i] + "\n";
}
throwable = throwable.getCause();
if (throwable != null) {
text += "Caused by: ";
}
}
System.err.print(text);
text = text.replaceAll(" ", " ");
Window.alert("系统错误:"+text);
}
});
2010年5月13日星期四
Gwt 中为加载中的Frame加上wait(二)
final MessageBox box = MessageBox.wait("等待", "正在查询数据,请稍后...", "查询中...");
final Element frame = window.getElement();
final Timer t = new Timer() {
@Override
public void run() {
if (ready(frame)) {
this.cancel();
box.close();
}
}
};
t.scheduleRepeating(100);
}
private native boolean ready(Element frame)/*-{
return frame.contentWindow.document.readyState=="complete";
}-*/;
2010年5月8日星期六
基于GXT的决策分析系统基本完成
面临一个抉择,换.net平台做winform,然后用sql server Analysis Services 的现成组件,这要技术上肯定可行,但是需要购买一堆微软的东西,钱啊。
正好以前看过一些GWT的资料,以及基于GWT的开源框架,它的界面效果倒是可以满足客户的要求,遂毛遂自荐,想试试用GXT实验是否能实现要求的功能和效果,同时也有其他同事考察了SAP的BI,水晶E表,IBM的Cognos,结果因功能实现不够或者商务问题搁浅
好像春节后没多久就开始搞GWT,现在终于实现了(或是变相实现了)要求的功能、满足了客户的意见,很有成就感,期间经历了两次重构,现在采用的GXT提供的MVC模型,底层数据访问是通过调用润乾报表API,将润乾报表运算结果转化为一个List,然后交给GXT在页面展现。
页面功能上,GXT挺全面,Grid列排序,隐藏显示特定列,树形展开收缩,用open chart封装的统计图表,数据钻取,列标题分组,拖拽形式动态设置列维度、行维度以实现灵活查询,将灵活查询行列维度保存起来供以后随时打开,将结果到处Excel、PDF、Word,动态设置查询条件的显示隐藏,动态的进度条提示等等
接下来还要融入GIS,实现报表到地图,地图到报表。
值得注意的是所有这些功能都是在一个窗口中完成的,实现了菜单、维度定义、报表、统计图功能的融合,不用客户点来点去,一步了然。
2010年5月4日星期二
婴儿办理北京户口
1、办理机构:
婴儿父母常住户口所在地的户籍派出所
婴儿父母常住户口所在地为宣武区的办理地点在分局户政大厅
婴儿父母常住户口所在地为大兴区兴丰、清源路、林校路、开发区派出所辖区的办理地点为分局户政大厅
2、办理时间:城镇地区派出所户籍接待室每周七天对外办公,农村地区派出所双休日实行预约办事制度。
3、办理时限:手续齐全即时办理
4、受理条件:父母双方或母亲一方在取得北京市常住户口以后出生(指2003年8月7日以后出生)的婴儿,在出生后一个月内,由户主、亲属等到婴儿父亲或母亲户口所在地派出所申报出生登记(2003年8月7日以前出生的仍按原有规定随母申报出生登记)。婴儿父母一方为本市集体户口,一方为本市家庭户的,婴儿应当随家庭户一方登记出生户口;父母均为本市集体户口的,婴儿可以自愿选择随父随母登记出生户口;母亲为本市集体户口,父亲为外省市户口的,婴儿可以随母登记出生户口;母亲为本市农业户口的,婴儿可以自愿选择随母随父登记为非农业户口;父母双方或母亲一方系驻京部队现役军人的,婴儿可以自愿选择随父随母登记出生户口。
5、申请资料:
(一)父母双方或母亲一方是北京市常住户口的婴儿,在出生一个月内,由监护人到婴儿父亲或母亲户口所在地派出所申报出生登记。婴儿父母一方为本市集体户口,一方为本市家庭户口的,婴儿须随家庭户一方登记常住户口。婴儿母亲为本市集体户口,父亲为市外户口的,户口可随母亲登记为集体户口。母亲为本市农业户口的,婴儿可以自愿选择随母或随父登记为非农业户口。
办理出生登记,应出具下列证件证明:
A、婴儿出生医院填发的《出生医学证明》;
B、婴儿父亲、母亲的《居民户口簿》、《居民身份证》、《结婚证》;
C、婴儿母亲户口所在地计划生育部门出具的《生育服务证》(随父申报登记的,该证需到母亲户口所在地计划生育部门办理迁移手续);
D、婴儿母亲系驻京部队现役军人的,须出具其母所在部队团以上政治部门出具的证明及本人身份证件;
E、超计划生育、非婚生育婴儿等违反法律法规规定生育的,须持婴儿出生医院填发的《出生医学证明》和婴儿父亲、母亲的《居民户口簿》、《居民身份证》、《结婚证》及婴儿母亲户口所在地计划生育部门开具的缴纳社会抚养费证明。非婚生婴儿同时提供亲子鉴定证明经派出所审批办理;
F、在港、澳、台及国外出生的婴儿,须持国外或境外医疗机构出具的出生证明原件、复印件及翻译机构出具的出生证明翻译件;我驻外使领馆签发的《中华人民共和国旅行证》或《护照》;婴儿父亲、母亲的《居民户口簿》、《居民身份证》、《结婚证》;《北京市生育服务证》或缴纳社会抚养费证明或区县计生部门出具的同意入户证明。
(二)父亲为本市户口、母亲为外省市户口的婴儿(2003年8月7日以后出生),要求随父申报出生登记的,应符合北京市计划生育政策,经婴儿父亲户口所在地派出所审批办理。应出具下列证件证明:
A、入户申请;
B、医疗机构填发的《出生医学证明》;
C、婴儿父母亲的《居民户口簿》、《居民身份证》、《结婚证》,婴儿父亲的住房证明;
D、《北京市生育服务证》(外省市生育服务证明需到入户地街、乡计划生育部门更换成《北京市生育服务证》)。
告知
6、收费标准及依据:不收费
7、办理依据:《中华人民共和国户口登记条例》、《派出所办理常住户口登记工作规范》(试行)
自:http://eservice.beijing.gov.cn:8080/zzbj/Detail.aspx?id=11&cid=426
2010年4月17日星期六
第一次
对防伪的重视从某种程度上能看出对产品品质的重视
http://www.dumex.com.cn 多美滋
搜索“防伪” 没有信息
有防伪查询页面,但显示“系统维护中,请稍候回来验证。”
电话400 880 5288
http://www.meadjohnson.com.cn 美赞臣
搜索“防伪” 找到三条关键字信息
找到防伪查询页面,有详细说明
电话8009880100
http://www.beingmate.com 贝因美
搜索“防伪” 找到三条关键字信息
找到防伪查询页面,有详细说明
电话8009880100
第一次没打开,刷新才打开
http://www.wyeth.com.cn 惠氏
搜索“防伪” 没有信息
没找到防伪查询页面
感觉不是做奶粉的,做保健品的
待购:
婴姿坊 婴幼儿全效护臀霜 60克/支 当当价:¥34.90 红孩子 ¥48.00
http://product.dangdang.com/product.aspx?product_id=20453812
婴姿坊 婴儿补水润肤露 150ml/瓶 当当价:¥28.80 红孩子¥28.80
http://product.dangdang.com/product.aspx?product_id=20453824
限量送80湿巾!好奇弹性超薄纸尿裤普通装NB35送80片湿巾 当当价:¥54.90 红孩子 没有
http://product.dangdang.com/Product.aspx?product_id=20769478
美赞臣安婴儿A+(新) 400克/盒 当当价:¥95.50 红孩子¥96.50 丽家宝贝¥96.50
http://product.dangdang.com/product.aspx?product_id=20357698
尼龙奶瓶奶嘴刷
http://product.dangdang.com/product.aspx?product_id=20762772
妈妈乐妇婴两用垫10片/包 当当价:¥8.30
http://product.dangdang.com/product.aspx?product_id=20385693
好奇婴儿柔润湿巾80抽盒装(加厚) 当当价:¥26.10
http://product.dangdang.com/product.aspx?product_id=20388652
婴之侣 洗澡温度计 当当价:¥8.00
http://product.dangdang.com/product.aspx?product_id=9321403
2010年4月15日星期四
Unable to modify the parent container element before the child element is closed (KB927917)
IE8报下面错误,而且是我的机器不报,同事的机器报,试了4台,两个报,两个不报,IE版本都一样,没想明白
解决:1、查看是否有未关闭的html标签,比如<table>而没有</table> (我就是这个原因)
2、是否在页面未加载完前js代码操作了body里的元素,将相关js代码移到</body>后面
网页错误详细信息
用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
时间戳: Wed, 14 Apr 2010 08:33:56 UTC
消息: HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)
行: 0
字符: 0
代码: 0
URI:
http://support.microsoft.com/kb/927917
2010年3月30日星期二
OLAP(On_line Analytical Processing联机分析处理) 和 OLTP(On_line Transaction Processing联机事务处理)
OLAP(On_line Analytical Processing联机分析处理) 和 OLTP(On_line Transaction Processing联机事务处理)
OLTP:On_line Transaction Processing 联机事务处理 ,以业务处理为主
OLAP:On_line Analytical Processing 联机分析处理,则是专门为支持复杂的分析操作而设计的,侧重于对决策人员和高层管理人员的决策支持
2010年3月29日星期一
2010年3月23日星期二
2010年3月11日星期四
GWT GXT探索
现在想想 经历了三个阶段
刚开始是demo阶段,因为不知道路走不走的通,全面摸索GXT能实现的效果,也没注意模块的规划,甚至就一个类
而后发现还是能走通的,就开始添砖加瓦,发现代码越加越乱,决心重构,定义了多个包,多个类负责不同的功能模块,定义了一些Panel,一下子清晰多了,也遇到了不同模块间互相调用的问题,自己想当然的办法就是在一个类中声明每个模块作为属性,就像一个总管,每个屋子的钥匙我都有了,也认识到了这样的缺点,一些模块中的事件不等不在这个主管中定义
现在Now,用一天时间再次改写,仿照Gxt中的例子Explorer
1、将各个模块定义成com.extjs.gxt.ui.client.mvc.View,View中必须实现方法handleEvent(AppEvent event),负责处理发给自己的事件
2、为每个View定义com.extjs.gxt.ui.client.mvc.Controller,每个Controller中包含View,在这里定义View要处理的事件
3、在Dispatcher中注册每个Controller
这样,每个View各司其职,他们各自有各自的功能,会接收为他们定义的所有事件并处理,发送事件Dispatcher.forwardEvent(appEvent);
感觉这次改写后 速度还没有改写前的快,现在每次操作url会自动添加Hash,想把它去掉,一直没找到根结
2010年3月3日星期三
Gwt中为加载中的Frame加上wait
在网页加载过程中加入wait
在页面中加入javascript
var ready = false;
$j(document).ready(function(){
ready = true;
});//这里用了jquery
然后再java中声明
public native boolean ready(Element frame)/*-{
return frame.contentWindow.ready?true:false;
}-*/;
然后在设置Frame的url时
olapFrame = centerCp.setUrl(GWT.getHostPageBaseURL()
+ com.google.gwt.http.client.URL.encode("jsp/showOlap.jsp?dim="
+ dims + "&dimname=" + colLabels + ""));
final MessageBox box = MessageBox.wait("等待", "正在查询数据,请稍后...", "查询中...");
final Element frame = olapFrame.getElement();
final Timer t = new Timer() {
@Override
public void run() {
if (ready(frame)) {
this.cancel();
box.close();
}
}
};
t.scheduleRepeating(100);
eclipse中的add import organize imports
add import导入指定的类
organize imports导入所有需要导入的类,并且如果有些import是没用的,那么eclipse会自动删除
gwt中JavaScript访问java代码
//调用JAVA静态方法
//规则: @全路径类名::静态方法名(方法签名)(传入参数)
//@com.capinfo.cdss.gwt.olap.client.ui.PartOlapCenterTab::saveOlapState
(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava
/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)
(saveName,dims,rowDims,colDims,sql,colLabels,expandInfo,hideInfo,exp,field,remark);
//调用JAVA非静态方法
//规则:实例对象.@全路径类名::方法名(方法签名)(传入参数)
//this.@com.capinfo.cdss.gwt.olap.client.ui.PartOlapCenterTab::saveOlapState
(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava
/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)
(saveName,dims,rowDims,colDims,sql,colLabels,expandInfo,hideInfo,exp,field,remark);
//调用JAVA的非静态属性
//规则:实例对象.@全路径类名::属性名
//var field=this.@com.capinfo.cdss.gwt.olap.client.ui.PartOlapCenterTab::field;
参考:http://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/types.html#wp16432
http://yonglin4605.javaeye.com/blog/568045
http://yonglin4605.javaeye.com/blog/564829
访问gwt嵌入页面中的元素
要访问这个网页中的js变量 var abc
setUrl返回一个Frame
public native void jsGetVar(Element element)/*-{
var abc = element.contentWindow.abc;
//element.contentWindow.document.getElementById("name");访问element
}-*/;
调用 jsGetVar(frame.getElement());
参考:http://tailorcai.javaeye.com/blog/186897
gwt 设置国际化
<inherits name="com.google.gwt.i18n.I18N"/>
<extend-property name="locale" values="zh" />
在页面中加入
<meta name="gwt:property" content="locale=zh" >
gxt 日期控件设置日期格式
DateField date = new DateField();
date.setPropertyEditor(new DateTimePropertyEditor("yyyy-MM-dd"));
2010年2月2日星期二
gwt 部署到Tomact Production Mode
我是用的Google Plugin for Eclipse ,跟用gwt的sdk编译有点点不一样
1、在gwt项目右键Google > GWT Compile,就会在项目中的war中得到编译后的文件
To run the application as JavaScript in what GWT calls "production mode", compile the application by right-
clicking the project and choosing Google > GWT Compile.
参考:http://code.google.com/webtoolkit/usingeclipse.html#compiling
2、将war中这些文件复制到tomcat webapp/应用 目录下
看一下WEB-INF\classes是不是有相应的class文件,要是没有用eclipse编译后复制过来
3、这样就需要gwt-user.jar了
url中也不需要?gwt.codesvr=172.20.66.140:9997这样的参数了
4、打开tomcat访问相应html可能什么都出不来,或者访问数据库时出错,查看gwt编译时控制台输出,是不是跟web.xml中配的
Servlet mapping是不是对应,
比如
Linking into D:\spring\workspace\fusionchart\war\olap.
Link succeeded
Compilation succeeded -- 92.640s
我的web.xml原来是
<servlet-mapping>
<servlet-name>olap</servlet-name>
<url-pattern>/com.capinfo.cdss.gwt.olap.Olap/olap</url-pattern>
</servlet-mapping>
要改成
<servlet-mapping>
<servlet-name>olap</servlet-name>
<url-pattern>/olap/olap</url-pattern>
</servlet-mapping>
相应html中原来是
<script type="text/javascript" language="javascript" src="com.capinfo.cdss.gwt.olap.Olap/com.capinfo.cdss.gwt.olap.Olap.nocache.js"></script>
改成
<script type="text/javascript" language="javascript" src="olap/olap.nocache.js"></script>
还没闹清楚为什么会这样
跟eclipse自动编译有关?高人告知啊