解惑

解己之惑,解人之惑

作者:cherami (第23页共82页)

createComponents的问题

ZK很好的一个功能就是打开一个zul文件把组件添加到页面上:
Executions.createComponents(“yyy/xxx.zul”, null, params)
但是用这种方式打开的页面有一个奇怪的问题,和直接加载的不同,直接加载的的那些image是写相对路径的,例如:
<toolbarbutton label="Add" image="../images/add.png"/>
如果是用createComponents打开,这个方式不好使,找不到图片,显示一个红叉叉,需要修改成:
<toolbarbutton image="images/add.png"/>

继承中的Serializable问题

为了实现深度克隆,一个最简单的办法就是让需要克隆的类全部实现Serializable,然后:
            ByteArrayOutputStream byteArrOs = new ByteArrayOutputStream();
            ObjectOutputStream objOs = new ObjectOutputStream(byteArrOs);
            objOs.writeObject(this);

            ByteArrayInputStream byteArrIs = new ByteArrayInputStream(byteArrOs.toByteArray());
            ObjectInputStream objIs = new ObjectInputStream(byteArrIs);
            Object deepCopy = objIs.readObject();
在实现的时候遇到一个问题,就是我的this的类的父类忘记增加implements Serializable,导致克隆出来的对象丢失了父类中的信息,解决方法当然也很简单了,在父类加上implements Serializable就行了。
所以用这个方式的时候一定要小心,就是你需要深度克隆的对象相关的所有对象都要implements Serializable,否则那部分不会被克隆,而且没有任何异常。那些类的子类也需要加上。

服务器端的分页功能

ZK的分页功能默认是在客户端做的,也就是服务器端返回所有的结果,然后客户端每次显示一页的数据,翻页的时候不提交请求到服务器端重新查询。如果服务器端返回的结果比较多,这种方案就不太好了,要实现服务器端的分页也很简单,在使用Listbox或者grid的时候不要使用mold="paging",而是添加一个Paging组件:
<paging id="groupListboxPaging" pageSize="10"/>
然后给Paging增加事件监听:
        final Paging paging = getPaging(pagingName);
        paging.addEventListener(
            "onPaging", new EventListener()
        {
            public void onEvent(Event event)
            {
                PagingEvent pagingEvent = (PagingEvent) event;
                int pageNumber = pagingEvent.getActivePage();
                int firstRow = pageNumber * paging.getPageSize();
                queryInfos.get(listName).getPageInfo().setFirstRow(firstRow);
                refreshList(listName);
            }
        });
代码中的getPaging和refreshList都是我自定义的方法,getPaging很简单,因为我的这个代码是在自定义的Window类里面的,所以:
    protected Paging getPaging(String pagingName)
    {
        return (Paging) getFellow(pagingName);
    }
而refreshList就比较复杂一些了,根据传入的list的名字查询结果并刷新list:
    public void refreshList(String name)
    {
        try
        {
            getListbox(getListboxName(name)).setModel(new BindingListModelList(list(name), false));
        }
        catch (Throwable t)
        {
            handleException(t);
        }
    }
核心就是拿到Listbox或者Grid然后setModel。

越来越喜欢ZK了

这几天一直在研究ZK,感觉是我做web开发以来见到的最好的Web的UI框架。
美国那边的Consultant在给我们做UI,但是他们的UI的框架还在开发中,而且好像还在根据我们的一些要求不断的修改他们自己的框架,所以进度很慢,上个星期给了一个final drop,但是问题多多,发了一个问题列表,到现在也没有任何回应,我就趁着这个功夫用ZK做了一份功能和UI类似的,从代码量上讲比那个少,而且最重要的是UI的代码很干净整洁。

以后会大力推广这个东东,把我的经验都整理出来。

ZK确实不错

前几天抱怨没有好的Web框架,Bob推荐了ZK,这几天有时间的时候试了下,感觉确实不错。
用ZK做原型确实不错,数据都可以是hardcode的,ZK的文档基本上都是在这种模式下的,但是我打算做的是那种真正可以运行的demo,可以连接我们的后台Service跑的,这样搞的时候发现Sample奇缺,也没有好的最佳实践,主要是ZK本身确实很灵活,既可以在view里面嵌script实现,也可以写类来实现,而且也可以写类来创建组件,慢慢的摸索了下,根据自己的偏好搞出基本的东西来了。以后有时间搞完善了就放出来给大家参考吧。
ZK的几个主要问题:

  • 没有真正的应用级的Sample,网站上的几个Real World Application都太简单
  • 现在应用的范围似乎不广,资源也就不那么多
  • License比较难过,要么是GPL,要么是Commercial,所以现阶段只能拿来练手和做原型。

我比较认可的特性:

  • 浏览器兼容性不错,几乎支持所有常见的浏览器
  • 入门比较容易,入门级的文档还是比较完善的,参考手册也还可以接受
  • 专注于Web,没有太去在意MVC之类,当然也并不限制你用MVC
  • 缺省情况下的设置都比较好,例如ListBox或者Grid里面的各列的宽度以及默认宽度100%之类的
  • 界面比较漂亮
  • 功能比较齐全

Web开发为什么没有UI的王者

做了这么多年的Web开发,感触最深的就是UI始终没有王者,虽然Web的Framework是一堆一堆,但是大家的注意力似乎都在MVC、Template以及Layout,以Java来说,历经了Servlet、JSP、TagLib以及JSF的变迁,当然其他的第三方的东西就更多的,但是就是没有一个成为事实标准,Struts勉强算一个强者,因为普及度最高,但是依然不能解决UI的表现力和交互性问题。我想这也是为什么现在AJAX以及RIA喧嚣尘上,但是无论是以JS为基础的AJAX还是RIA(以Flex和JavaXF为代表)的方案都不能解决全部的问题,无论是AJAX还是RIA,在交互性上都有不错的表现,特别是RIA,能够做出很酷很炫的界面,而以JS为基础的UI库也是不胜枚举,就是没有出现强者,各自分据一小块开发者。
这个问题应该是已经被问了无数次,但是迄今没有出来很好的方案,在最近的两年内都不太可能出现什么转机,唉。。。

更新:
下午看infoq刚好看到一个针对这个问题的访谈,访谈对象都是一些典型阵营的人,很有意思,看完的感受就是:各自力挺自家的方案。不管是否出于商业利益,这个访谈的结果只能更加证明web的UI端的混乱不会结束。也许不同的方案确实要应用到不同的场景,以内容为主的网站更加倾向于原来的HTML为主的方案,对交互性要求稍高的可能用AJAX,对交互性和表现力要求最高的就用RIA。

总算用上大显示器了

来了快半年了,一直在用笔记本,没有显示器,一直问IT,IT说我们的显示器已经下单了,应该快到了,三个星期前问的时候说下周,等了一周又说下下周应该能到,内部和外部流程都出了点问题。今天早上一来Manager就说显示器来了,让我们去拿,呵呵,那叫一个高兴啊。Docking和显示器一起来的,显示器是dell 2209wa(22吋),去京东上查了下才1600。

打通关了

浪费了无数的时间,把真三国无双2打通关了,魏、蜀、吴、他100%,武将全,300副将全,100%连携。
不过我只玩了其中部分的主将,很多副将打出来也没有用过,这个都是我自己打出来的结果,为了100%连携不知道浪费了多少时间看了多少帖子,为了把左慈作为副将打出来,不知道试了多少次,也是浪费了无数的时间实验和看帖子,最后还是在N个百度知道中看到一个比我更执着的人到日本的网站上看到的:
需要在12分钟内干掉左慈三次然后让曹操逃出宛城,找到这个线索后实验了三次才成功,最后是用孙权(因为他的统帅是49最高),带了张飞、张苞、田丰(他们的技能都是大喝,这样可以不用打兵直接过据点,可以用的时候马上就用),用了11分45秒涉险过关。

废话不多说,分享给大家:
PSP真三国无双2(进化)繁体中文版完美存档(魏、蜀、吴、他100%,武将全,300副将全,100%连携)

PSP真三国无双2连携真正全的列表

为了把这个连携全部打出来费了好大的劲,用goolge和百度搜索到的都是不全的列表,而且重复的全部是错误的那个版本。
有个相对比较好的版本,里面错了小部分,就差最后一个(打到98%),上面说周瑜和诸葛亮有连携,连携名字是好敌手,但是实际上应该是诸葛亮和司马懿。

废话少说,连携列表:
刘备与赵云–厚戴主从
赵云与黄忠–互敬赖之同僚
关羽与关平–关义父子
刘备与关羽,张飞–桃园的誓言
关羽与张辽–尊敬之挚友
张飞与星彩—-张亲子
夏侯敦与曹操–盟友
夏侯敦与夏侯渊–夏侯堂兄弟
典韦与许褚– 竞争之战友
曹操与典韦–坚之主从
曹操与许褚 乐之主从
孙策与周瑜-肝胆相照
周瑜和小乔–周夫妻
阅读全文

Intellij没有Eclipse好

虽然小胖很喜欢Intellij,并且预言我会喜欢上Intellij,但是用了超过4个月,我并没有喜欢上它,但是也没有像原来那样感觉它太花哨或者难用。公平的讲,Intellij是很不错的,功能做得很完善,特别是代码提示方面,但是似乎仅此而已。从我到现在使用的经验而言,Intellij提供的功能,Eclipse都提供了(有的是插件提供的,Intellij一样),但是在几个方面我感觉Intellij比不上Eclipse。
首先是多个工程,Eclipse下可以打开多个工程,在同一个Eclipse实例里面,但是Intellij只能打开一个工程。
第二就是Hot deploy,Intellij里面也有些插件做这个事情,例如AutoPackage,但是做得不够好,因为修改完代码以后需要保存,在Make Project(CTRL+F9),然后就被自动重新发布了,但是如果装了MyEclipse或者经过简单的配置,在Eclipse下,只需要保存下修改,Eclipse会自动编译并且修改会被发布,这个是JVM支持的功能。
第三就是语法高亮,如果把Eclipse里面的代码拷贝到富文本编辑器,例如Word或者发邮件,拷贝出来的代码是带语法高亮的,Intellij拷贝出来的没有语法高亮

更早的文章 更新的文章

© 2025 解惑

本主题由Anders Noren提供向上 ↑