| david's profileThe Butterfly Effect in ...PhotosBlogLists | Help |
|
11/29/2005 折腾够了,也该歇歇了听到webwork将merge with Struts的消息,我是这个高兴啊。表现层框架过于的多了,现在,一个应用最火最灵活 一个应用最广最成熟的框架要合二为一,省得我折腾了。另外,我看那JSF就更没戏了,sun真是可悲啊可悲,本以为我看看,不会赔本,现在权可以当作休闲读物来读了,未来我看表现层除了ajax框架就是struts+ww的新合体struts2.0了。不知道ww的灵活 优雅会不会并入了apache巨人旗下也变得反映迟钝。我可以放心的看webwork了,也不必担心做struts应用过于老土了。new struts + ajax。嗯,我的战线缩短了不少啊,只关注这两个方向就可了(当然是表现层) 11/27/2005 有知识,没文化有知识,没文化--自己给自己的自我感觉最贴切的评价。有教养,没修养--当然此修养的缺乏并非指的随地吐痰之类的素质问题,而是没有艺术修养,文学修养。人活过的时光无法倒流了,再怎么感慨---小时候土堆上扔石子,院子里打水枪的时间,长大了乱泡的时间要是用在读书上多好啊---也无济于事。和tt一起看文章总是被拉下一大截,哼哼,没办法,书读得少,文盲一个,案头除了电脑书就是几本心浮气躁的成功学(自动自发,卡耐基口才之类),几张一份能看半年的经济观察报加上本圣经。可惜每次睡前躺在床上都自然的习惯性的捧起了计算机书籍……文盲生涯继续着。
今天跟tt说起来想读厚黑学,因为感觉自己无匹夫之勇却满是妇人之仁,古往今来像我这个鸟样的就没一个能干大事的。还一天心高气傲的,shit,怎么跑题到这来了。说到厚黑学里一段,讲项羽不够黑不够厚,刘邦够黑狗厚,能杀韩信--tt说,那是他老婆杀得。我哪知道?我能知道项羽和刘邦一起上过PK台就不错了……顿时感觉,自己生活太无趣了,文学素养差写不出cimego那样的诗情画意文章就罢了,俺也没想当郭敬明,可是历史知识匮乏,这辈子白活么?欧洲史匮乏就罢了,who care谁吃饱了撑的提出来君主立宪,谁提出来三权分立,可是中国历史也混沌,这不该打屁股么?
遂决定,自己不应该沉迷于对技术的yy了,像技术图书,为啥都爱看候捷老师的?那文学功底非常人能及,而gigix 庄表伟这样的人物,一看文字就知道博览群书,你说我20多岁吊锒铛,成天AJAX J2EE的却数典忘故……
以后枕边时间就留给伟大的文学和历史了(不过在我想读列表中,第一位可是尼古拉的遗嘱,嘿嘿,我也看看炼金术 魔法石到底怎么一回事。传说和历史,到底怎么一回事)。
提到图书就不得不提douban.com 推荐我的朋友们,爱读书的朋友们(我也算爱读书吧
老大推荐的细节决定成败,让我最近经常反思,关注细节有习惯问题 经验问题 办事方式问题 态度问题。而豆瓣就算找对了切入点并且抓住了细节。顺便fuck一下当当网,什么玩意儿!!!
废话少说,douban is really fucking cool.dangdang is really fucking shit.滴眼药去了,看电脑看的都对眼了…… 11/26/2005 选择中目前正在选择比较ajax应用方案,来改善用户体验,至少可以让我以后写出更cool更友好的UI。buffalo确实使用起来让人感觉很清爽,调用十分灵活,不须多配置,而且micheal的能力毋容置疑,我们要支持国产,支持BJUG么。但是micheal的理念是One pae One application,虽然从buffalo中各取所需,但是,没办法说服公司用它,自己用吧,起码我要过几天给它研究一下,看如何与struts JSF整合再说,那样现在的项目我就可以应用。DWR没太大感觉,不过DWR可以调用配置可暴露的任何方法,包括struts action,只是actionForm没法用了,虽然我一直骂它,但是总不能做个异类吧,让同事都看不懂我的代码……暂时放着,它的代码我也没打算读,优先级在buffalo之后。要说目前首选就是ajaxanywhere,还有与JSF整合官方例子,理论上与啥整合都没问题。嗯,先搞它啦——等我回头把项目的消息删除和会社检索弄成ajax应用吓日本人一下。
明日任务:prototype source codes and DOJO(我也纳闷,为啥个dojo新东西就比Rico有人气呢)。 11/24/2005 Behaviour.js 清洁html代码http://bennolan.com/behaviour/ 为了避免在html中引入过多的script tag,尤其现在富客户端应用很火的时候,script写的就越发的多。 官方网站举了一个这样子的例子
这是Flickr上面一段代码。确实,它使得代码阅读起来结构不清晰了。Behavior应用之后,不需在元素上写明触发事件要执行的方法,比如 var myrules = { 東京ラブストーリ何から つためはいいのか ajax 贴贴脸本想翻译IBM的一篇文章 Build apps using Asynchronous JavaScript with XML 但是发现不如就按照那个方式想怎么写就怎么写。之后有时间了会把其中的一个系列从基本应用到使用DWR框架的翻出来,也许对一些被AJAX buzz word一直骚扰但是没亲密接触的人有些用处。嗯,把dojo也列入计划吧,但愿我能坚持。 那组成AJAX的几项关键技术 javascript css DOM XMLHttpRequest,可能只有XMLHttpRequest对我们来说是相对来说陌生的,前3项,只要做过web app的都不可以说不了解。 XMLHttpRequest:XMLHttpRequest是一个可以让用户不刷新页面的前提下直接提交和得到xml数据的对象。 这并不是一个xx组织的标准产生物,所以要得到一个这样的对象,是通过不同浏览器的扩展来实现。IE通过ActiveX Object来提供,所以大多数ajax应用会看到对象的产生过程都有对浏览器的判断以达到兼容。不要开始大骂MS,平台给我们带来的麻烦并非都是微软造成。对于此对象,我不是个历史学家,所以只能稍微查找些资料来了解。 It is not yet being embodied in any public standard (although something similar is in the works for the proposed W3C DOM Level 3 Load and Save spec)from XML.COM所以它不是一个标准而微软不去执行的例子。 所以,可以感谢一下微软,还是做了些创新的,估计是为了他的EXChangeServer的web client端服务的……我猜我猜。 Similar functionality is covered in a proposed W3C standard, Document Object Model (DOM) Level 3 Load and Save Specification. In the meantime, growing support for the 所以我们还是要通过如下代码方式创建一个对象:
function init() {![]() if (window.XMLHttpRequest) {![]() req = new XMLHttpRequest();![]() } else if (window.ActiveXObject) {![]() window.alert("ActiveXObject");![]() req = new ActiveXObject("Microsoft.XMLHTTP");![]() }![]() var url = "server.php";![]() req.open("POST", url, true);![]() req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");![]() }![]() 通过对不同浏览器的判断,产生不同的对象。我想大至大家了解了此对象用处,http请求也是在一些标准协议中定义的header之后以名称,值对的方式来向服务器发送,作为xml天生对数据良好描述的本领,担任此任务小case,但是对于文件上穿等,还是用传统form来解决滴吧。 备考:Table 1. Common XMLHttpRequest Object Methods
好了,废话讲完了,开始菜鸟级别的亲密接触。我想ajax是有应用场景的,那么我举个我感觉很贴切的应用场景,在论坛注册的时候,验证是否已经存在你要注册的用户名。在没有ajax之前,我们都要单独点一个button,弹出新窗口等待结果。这里面我们使用户输入完了用户名之后,不影响其正常填写其他内容,神不知鬼不觉地完成验证并提醒客户是否已经有人注册了。 首先构建一个注册画面 regForm.php
<html>![]() <head>![]() <script type="text/javascript" src="ajax.js" >![]() </script>![]() </head>![]() <body>![]() <font face="Arial,Helvetica,Verdana" size="3">![]() <form name="regForm" action="reg.php">![]() <b>Enter Your User ID: </b>![]() <input type="text" name="userID" onblur="validate(this.form)"/> ![]() <!--Message -->![]() <span id="msg"></span>![]() <br/>![]() <input type=”password” name=”pwd”/>![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() .other input filed![]() <hr>![]() </body>![]() </html>![]() ![]() 好啦,一个丑陋无比的注册页面搞定了。 紧接着,完成我们的ajax.js文件 var req; var url; 定义req url全局变量 一个用来表示XMLHttpReqeust一个表示请求的服务器端资源。 function init() { //。。。。。看上面 } function validate(formObj) { init(); req.onreadystatechange = userIDValidator; req.send("userID ="+formObj.userID.value); } 此函数便是当用户输入完了用户名,自鸣得意的去输入其他的文本域时触发的事件,它悄悄地执行。由于在init()函数中我们如此设置req.open("POST", url, true);最后一个参数true就是异步的设置所在,如果未false,效果大家看看msn spaces的流言就知道了,叶面虽然不刷新但是要停止响应一段时间,嗯,给你点看字的机会却不让你滚动边上可爱的scroll翻页。 既然我们设置了异步处理,那么执行完了通知谁啊?通过此句req.onreadystatechange = userIDValidator;当req状态改变的时候,执行userIDValidator。这是一个回调函数的应用,不理解啥是回调没关系,总之req状态改变了,就执行此函数名字的函数(你也可以写匿名函数req.onreadystatechange=new Function{javascript真伟大}).一切就绪,向服务器发送请求。Send()方法中传递请求的参数。 当服务器响应了呢?那就是userIDValidator要干活的时候啦。
function userIDValidator() {![]() if (req.readystate == 4) {![]() if (req.status == 200) {![]() if(req.responseText!=”true”){![]() window.alert(“你怎么注册别人有的用户名啊?”);![]() document.getElementById(“msg”).innerHTML=”换一个换一个”;![]() };![]() }![]() }![]() }![]() ![]()
0 = uninitialized req.status == 200这个是标准的http响应状态码,有些时候你的ajax应用响应石沉大海,你就可以输出这个req.status调试一下,看看是不是出现了404 202等咚咚。 待会我们看见那个极其简单的服务器端php文件返回的text/html普通响应,所以此刻我们用req.responseText。其实稍微复杂一些的应用都要返回xml作为响应结果,然后客户端用脚本解析xml文件再通过操作DOM来改变页面内对象的内容或者结构等。也可以返回的xml对象通过xslt来解析,不过增加了学习的曲线。服务器端产生xml对象也是繁琐的工程,所以出现了很多现成的框架帮助简化开发,比如国产buffalo,洋货DWR等,通过与前端dojo Rico等框架组合,产生强大的交互功能,一流的用户体验。 那么简单的xml操作可参考ibm文章中做法:
var messageObj = req.responseXML.getElementsByTagName("message")[0];![]() var message = messageObj.childNodes[0].nodeValue;![]() if (message == "true") {![]() msg.innerHTML = "Subscription is valid";![]() document.forms[0].order.disabled = false;![]() } else {![]() msg.innerHTML = "Subscription not valid";![]() document.forms[0].order.disabled = true;![]() }![]() ![]()
<?php 我靠,太简单了吧,你耍我呢啊?这个……我用写全么?无非就是 <?php isValide()中连接数据库,查询,返回结果…… ok,你已经可以神不知鬼不觉地检查用户名,然后突然弹出窗口提示用户,你的名字不对。 下一教程应该是谈论对象序列化和反序列化问题 之后是DWR 之后是dojo 之后是javascript的debug 之后是buffalo 之后是……之后是…… 11/17/2005 NB11/15/2005 平静如死水生活趋于程式化
几个常混在一起的同事,中午吃完饭了照例晒太阳。说起时间飞快,似乎都有同感。一旦生活成了规律,似乎时间就会过得飞快。和读书时再也不同。每周一还刚刚开始,似乎第二天就到了周末。重复着起床 上班 敲键盘 下班 这样平静的生活。每天期盼的似乎只剩下晚上回来跟tt做点吃的,然后看些自己喜欢的书。而每周期盼的似乎就是周五大家出去FB 然后周六打打球,看看欧洲联赛,和tt逛逛超市。几乎周末的一切活动都程式化了。
我真的开始恐惧时间流逝的速度了,从来没有过的恐惧,转眼间我要入职半年了,回头看看,似乎我还是毫无长进。伸伸手,自己离梦想的距离,不但没有拉近,反而变得越来越远。还好,这辈子曾经优秀过,就碰到了一群比我优秀的朋友,他们的nb轨迹时不时提醒我,生活还要继续,梦想还要追逐---以至我不会麻木。吾生也有涯,吾知也无涯……
自己感觉好象要做些什么的时候,总是突然有什么异常抛出,阻碍了自己。其实不然,哪有顺顺利利的呢,这都是机会成本。没有放弃就没有所得。Never lose my passion。
很佩服DFLYING专注的走自己的路的信念,而我似乎总是要听下来看看别人,大家都在哪呢?可能个性不同,他是发电机,我是蓄电池,我需要停下来看大家的时候让别人给我充电。
柜子上的书越来越多,枕边也越来越高,还好,自己再不像大学一样耽误时间。我真的很奇怪现在的自己,有些时候,因为一些事情耽误了自己的读书计划,就会内疚的很,似乎浪费了好多时间,如果早这样---这种crap还是少说得好。似乎是该放弃一些东西的时候了,我苦苦把自己休息的时间拿出来做我的研究,工作中却在研究excel;红宝书与大家日本语,矛盾却无法统一;更重要的是,我的时间,如此飞快的逝去。Stop....No one told me that life was gonna be this way.Enjoy it?No, i cann't feel large charge when i was violated.So change it step by step.Go go go,super david. 11/14/2005 次の記事について :老照片 from Yu,CuiNo more comments.One sentence remind me:Never forgot your dream whatever the dream is so far away and unpractical. 元の記事からの引用 老照片 11/12/2005 Thanks givingRead first:
我们的生活是否过于糜烂了?每周末大家沟通感情的一顿饭钱就可以帮助几个孩子读一年的书……我从不会把钱交给政府手里,但是我想,如果有机会能够到得实地,我一定会每个月都帮助一个孩子,那不到200元的学费,还不到我们一件衣服的一半……Thanks giving.有时候会抱怨上天不公,对阿,上帝偏爱我了,珍惜生活,enjoy everyday.....
11/9/2005 集成了,崩溃了我不知道CMMI都影响了些什么,除了留给我无尽的meeting和文档,但是迭代周期,构建频率,测试方法等等跟开发息息相关的却没有任何实质性指导。我不知道这个是不是就是根据我们这个没做前号称超级轻松 时间超级富裕tailor过的结果。
可是CMMI就像大象,即使体格小,也是象,一旦计划制定了,似乎无论情况怎样,都无法迅速反应。像我们这个小小的,需求拿了一个多月,编码却只有 2周的项目,CMMI没有任何控制的迹象。可能说:没有CMMI你们更加混乱。会么?我看不出来还能再混乱到什么地步了。
在客户在海外,需求不明,QA反应迟钝的情况下,CMMI只能让我们用meeting来充斥一次次等待客户确认需求的时间。
我相信如果用敏捷方法指导开发绝对不会导致目前的混乱局面。首先测试一方面,我感觉V MODEL十分适合,在需求拿到了 demo产出的时候,function test case就应该设计出,那个时候会让我们尽可能少的去想实现,而把用户体验和功能彻底做好。而high level design完成的时候 Intergrated Unit test case就应该设计完成(也许对一个技术十分不成熟的团队来说此要求过高,大家没有任何设计测试用例的经验),当detail design完成的时候,Unite Test case 也应该随之产生,这样也不知不觉地开始了测试驱动开发。而我想周围的同事都习惯性的写好了一个功能点了部署到服务器,跑一下,出错了以后,根据tomcat可怜的报错信息开始跟踪调试,无数的log.debug更甚至无数的system.out。这个还好,仅仅影响效率而已。可是没有任何对迭代的指导,导致各自为战,马上要集成了,哇,崩溃了。一个程序集成的时候是麻烦最大的时候。大家自己的模块集成单元测试都没做好,怎么能做这种IT呢?如果我们至少一周构建一次(根据开发计划,因为我们不是一个敏捷团队),怎么会导致今天这种崩溃的局面呢?まいたな!
事总要有人做的,程序员修炼三部曲之项目自动化之道已经躺在我的枕边。但愿我的努力和大家这次的教训能让我们下个项目在deliver之前不用再集体加班…… 11/8/2005 偏得无意打开电视,居然发现大学生篮球超级联赛请来了LY.哈哈,坐在前面慢慢观看。
大超明显是学NBA么,NBA全名星周末总是把MC那样实力的人请来清唱国歌,可惜中国的国歌不适合清唱,谁敢用国歌来展示唱功呢?除了规规矩矩的,谁也不敢拽几下子。
还好,中场的时候LY再次出场,可惜后面伴唱的过于激动了,那声音,嗷嗷的……我都听不清了。心满意足鸟,继续看书去…… 11/7/2005 reflectionReflection
Look at me You may think you see who I really am But you'll never know me Ev'ry day It's as if I play a part Now I see If I wear a mask I can fool the world But I can not fool my heart Who is that girl I see Staring straight back at me When will my reflection show Who I am inside I am now In a world where I have to hide my heart And what I believe in But somehow I will show the world What's inside my heart And be loved for who I am Who is that gilr I see Staring straight back at me Why is my reflection someone I don't know Must I pretend that I'm Someone else for all time When will my reflection show Who I am inside There's a heart that must be free to fly That burns with a need to know the reason why Why must we all conceal What we think How we feel Must there be a secret me I'm forced to hide I won't pretend that I'm Someone else for all time When will my reflection show Who I am inside When will my reflection show Who I am inside 11/6/2005 service is software,software is service软件即服务,微软可能迟迟不肯承认不愿意拥抱这种趋势的原因,可能就是服务目前还停留在通过网络提供的阶段(可能也只有通过网络才能体现这一理念),而软件通过服务暴露给客户,就意味着对操作系统的淡化--这一微软赖以发家的金母鸡,当然还有office。而为何微软又开始承认此趋势呢?可能只有bill gates才知道。可能大家都这么设想软件的未来,并且Google之类的公司也一直在向此方向努力,给了微软太大的压力。www.live.com 这个被微软提升到了战略高度的雏形产物,说实话,我太笨,在没看到各种解说可评论之前还没看出来与以前myMsn有何差别。不过可能就是理念不同,将来发展方向不同吧。MyMsn主要给用户一个信息的集合点,一个个人信息的门户,当你add content的时候,你得到的是FOX BBC等新闻 天气预报等咨询。而window live add content将来可能会添加服务,软件的服务,比如微软也说过要把office作为服务提供,将以授权形式的收入转化为广告盈利。微软一直都是一个创新型的公司,不知这次的绝地反击,会给google YAHOO AOL等公司带来怎样的冲击。
BTW,一直想实践一下webwork(or JSF)+hibernate的应用,中间搭配spring or EJB,可是总是想起码要做点有意义的东西吧。什么有意义呢?想来想去,重新发明个轮子的,谁让我没创意呢,做个个人portal。也许以后每个人的操作系统都是网络定制的呢…… 11/3/2005 K书加乱弹JSF与domain model既<core J2EE Patterns>后<Patterns of Enterprise Application Architecture>也上了我的书架喽,嘿嘿。本来都决定不再blog写废话,耽误时间,但是实在高兴(有啥高兴得,又不是买不着)不过再也不同捧着那英文ebook盗版马丁老大的著作了。王怀民翻译水平还是可以的,总不能比我前两天看的core JSF再差了吧。那本句子翻译的,中国人都看不懂的中国话。马丁的这本可是推荐,五星级……
JSF
![]() 最近看了看JSF,本来为了给自己个解脱,不再沉迷于表现层框架,可惜,实在标准无法让我满意,我也无法像banq那样死心塌地跟随标准,那样显得太过于保守甚至愚蠢(看看专业论坛关于某种如今流行技术的争论,1 ,2年前的争论,就会有深刻感觉了)。JSF仅仅在struts基础上进步了一些,但是,由于还是无法逃脱Struts的影子,没出现大换血的情况。毕竟JSF也是struts的缔造者参与搞出来的。可能当初sun看到了struts如此流行,于是招安了再缔造下一个标准,可惜SUN总是那么没有运气,JSF JDO EJB目前都处于尴尬的局面,甚至 sun制造成了傻了吧叽的不中用标准代名词,只要是SUN搞出来的就不怎么样。 JSF与struts的不同有以下这样几点:首先,更加灵活的POJO(JSF称之为managed bean)直接代替了以前的ActionForm。我认为这个虽然很到,但是是必然的,无甚可叫好的。ActionForm刚用感觉,哦,不错哦。可是当真正用了一段时间,真的就是感觉是个脱裤子放屁的产物。把ActionForm与各种商业上的模型产生的bean进行值得对考,或者又actionform组和几个bean组织的网。那么必然会让actionForm变得臃肿,因为有些属性是某个用户请求传递的,某个后端bean需要的,但是某些属性又是另外的bean需要的。ActionForm是粗粒度的,所以有些时候反而成了绊脚石。这个也和一个form一个action一个actionform对应关系有关。那么strus呢?一个标签<h:outputText value=#{user.name}> user为一个配置的managed bean,name是他的属性,任何组件都可以任意对应。具体到binding 组件树,渲染器暂时先不讲,我也没深研究。 JSF的类型转换与验证,没啥多说的,凑合用,没让我兴奋(don't make me high.^_^)类型转换倒是挺方便的,起码大部分情况不需要自己手动转换类型了。(因为客户端传递过来的都是String型) faces-config.xml 呵呵,名字很像struts-config.xml吧。但是功能不完全一样,这个JSF配置文件主要作用就是页面导航和managed bean的配置(包括POJO赋初值,map list类型赋值等)。struts中一个form要对应一个action 而action就是要调用service层或者小项目,直接action包办一切调用DAO Layer,这里面既包含了页面的导航又隐藏着包含了要调用什么样子的逻辑。但是JSF的配置仅仅是粗粒度的页面导航和action(此action非彼struts action,后面提到)。一个典型的简单的配置就是from-view-id 比如index.jsp然后outcome配置index.jsp表单中的提交指定的处理类比如<h:commandButton action="#{action.auth}">那么如果outcome配置的名字为action就会调用其指定的类的auth方法。所以可以from view可以配置好多响应事件和转向页面。 那么细粒度的事件驱动如何实现呢?JSF中有个理念。action处理的是页面的转向和逻辑,而actionListener处理的是页面逻辑,action不知道也不会处理页面逻辑。这样诸如联动下拉列表,就可以在下拉列表中配置actionListener来实现相应的处理。JSF的一个请求响应有相应的生命周期 从客户请求-apply request value-validate and data type transfer-update model-invoke application-response.每个阶段都可能产生事件都可能使事件监听的类做动作。而这些事件监听者的动作可以选择执行后继续生命周期流程,选择直接到输出结果,甚至全部跳过。 等有时间了结合实例讲讲JSF开发,感觉JSF还是个过渡工程,根本无法提起开发人员的兴趣,倒是类似webwork这种灵活多变的框架深得人心,而说到事件驱动,页面组件开发,大家更愿意研究Tapestry.其实也很简单,虽然我对T正要研究但刚有个了解但他对传统html标签的低侵入就很深的人心,普通的标签加上一个专属属性id就行。而JSF因为是标准,依然要大力推广作为标准的tag。看到<h:inputSecret .....>这样的东西能让谁能够高兴得起来呢?刚刚费力气把struts标签骂了一通,反过来还要再学一次JSF标签,引用我同事jacky的一句话:那还是杀了我吧。 而JSF的事件驱动总是让我感觉不是那么的清晰,真正的细粒度处理,还得ajax,即使asp.net以前也是要频繁的回传,而目前JSF只不过是变通了一下子,要么你就提交按钮制定action处理整体的转向和方法调用,而每个控件设置的listener只不过是在生命周期过程中伴随处理的逻辑,当然,你也可以通过处理过后直接跳过其他步骤地方式把这个actionListener抬举一下,但是用来用去,用不好还是要糊涂和混乱的。 可能是我看JSF时间太短,也没有项目实战,有些东西体验实在不深,所以还要深入研究一下。准备对比它和tapstry啦。嗯,想着明天把公司的那几本JSF的书down下来。中译版作者逼着我看英文啊,因为看不懂他们的中国话…… 时候不早啦,看我的小品joel on software去拉,关于Domain model and anemia-object的我的认识还是以后再yy吧……这东西,是我在javaeye最近看的最爽的讨论了。 Thanks wicketNot for it's another framework but it's introduction.:)
Look,so many buzz........choose one and stick on it.
11/1/2005 directionIt seems that too many presentation-layer frameworks make me puzzled.Thought they can be easily catalog--traditional MVC(struts,webwork,Spring MVC etc)component based(tapestry,JSF etc),every FW will cost me time to know it.And there r many many other ones as shale,Turbine,wicket.....I'm not foreknow so i don't know what will be the next de facto standard instead of STRUTS.So i can only follow official standard--JSF.Though I think it's not better than Tapestry.But i need more time to care business logic layer--Spring,EJB and design patterns and Persistant layer--Hibernate JDO toqure.So i decide stick my point on JSF temporarily.
Another direction is AJAX,it makes me feel sick now coz i metion it too many times.DWR and Buffalo are the candidates.dojo and Rico will paly as a present roll.
OK,i feel easy now.Go away,buzzwords....
じゃ頑張ってよ!!!!! |
|
|