解惑

解己之惑,解人之惑

分类:Web (第1页共5页)

互联网观察

Drupal不是那么好玩的

今天下午又试了下自定义Drupal,发现不是那么简单的。
下载了不少的module,CCK, view,以及Tagadelic和对应的view。
不过还是理解了一些东西了,基本的使用有些了解了,还需要进一步的自定义了。
PS:下载的主题ZEN感觉不太好啊,太简单了,特别默认是那个什么StarterKIT,没有什么布局嘛。

服务器端的分页功能

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。

Chrome浏览器

Chrome浏览器面世一天市场份额就占到了1%,由此可见google的影响力。我当然也是在第一时间就装上了使用,总体的感觉还是不错的,特别是它的这个名字和我的英文名发音差不多(Cherami),不过依然有一些问题:

  • 自动阻止了重复提交,我玩的网页游戏有买卖资源的功能,而卖资源的时候反应很慢,我一般都是狂点几十下,一下就可以把全部单子下完,但是Chrome自动阻止了这种行为,点击按钮没有得到响应时点击同一个按钮是无效的。
  • 不能显示XML文件,我在做Web Service,用它不能查看我的WSDL文件内容,这个应该起码按照文本显示下吧。
  • 不支持FCKEditor,也就是我的blog的编辑器,所以只能用IE或者FF写博,不知道是哪方面的问题

另外,Chrome可以导出IE的很多内容,最需要注意的是可以导出IE里面保存的表单密码,我想这个应该算IE的一个安全漏洞吧,最起码IE不会提供API去导出密码,所以google在这一点上涉嫌反向工程

打开SSL后Apache的日志的问题

帮别人做apache+Tomcat的集群,另外只能对外开放SSL端口,所以用OpenSSL做了SSL的配置,然后我想看看他们的Access.log,但是修改配置后无效,后来发现是httpd-ssl.conf中的配置会覆盖httpd.conf中的配置,查了下apache的手册,发现原来虚拟主机的配置会覆盖系统的配置,而SSL的配置就是利用虚拟主机配置的,问题解决。

PS:apache2.2新增了一个很好的特点,就是SetEnvIf,可以设计Access.log中只纪录某些类型的访问,对于我们而言,主要关注的就是动态的内容,静态的内容不仅多,而且我们一般都不太关注,所以这样配置下就可以只纪录.do的请求:

SetEnvIf Request_URI "\.do" is_action
CustomLog logs/access.log common  env=is_action

Apache2.2和tomcat集成更加简单了

Apache2.2新增加了几个module,和tomcat集成更加的简单了:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

ProxyRequests Off

ProxyPass / balancer://myCluster/
<Proxy balancer://myCluster/>
       BalancerMember ajp://localhost:10009 route=tomcat1
       BalancerMember ajp://localhost:20009 route=tomcat2
</Proxy>

IE不显示内容

呵呵,发现在很多情况下IE不显示网页的内容,如果查看源代码会发现页面的内容很多,目前发现的两个情况(使用的是IE6):

  1. 如果script使用不正确,例如引用一个js文件写成:<script language="javascript" src="/js/common.js" />,IE会忽略这个后面的全部内容,页面显示为空白。必须写成<script language="javascript" src="/js/common.js"</script>>。
  2. 必须设置title,如果你写的title是:<title />,IE也会忽略后面的内容。必须写成<title></title>或者根本没有。

感兴趣的可以试试:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
        <title />
        <link href="/stylesheet.css" rel="stylesheet" type="text/css" />
        <script language="javascript" src="/js/common.js" />
    </head>
    <body>
        xxxxx
    </body>
</html>
上面的两种情况在FF下不会有问题

欣赏JavaEye的开放性

经历了两天的加班后,今天早上终于把演示做完了,没有出现大的问题,而我们也就可以喘息一天了,所以利用这个时间看看有什么新的技术动态没有,上JR上看了下,没有什么太吸引人的新闻和文章,去JavaEye看了下,发现JavaEye改版了(可能有半年没有去过了),然后发现我原来在JavaEye的注册用户没有了,就又注册了个,还好我的万能ID(cherami)没有被人用,注册后的短信给了我一个惊喜:
增加RSS自动博客导入功能
呵呵,没有犹豫,马上导入,不过这个同步需要时间,到目前位置还没有任何反应,不过光从这个设想看,就值得夸奖一下JavaEye的开放精神,现在有太多的人都有自己的独立域名的Blog,这个功能的推出无疑可以增加JavaEye的凝聚力。

2007年3月29日更新:
确认同步功能正常工作,不过有个担心就是,那个里面的评论和这里的评论分离了,不过好像有点吹毛求疵了。
另外就是这里的更新了,那边的应该不会更新吧?
过几天看看JavaEye上的这个日志的内容就应该知道了。

更早的文章

© 2020 解惑

本主题由Anders Noren提供向上 ↑