??xml version="1.0" encoding="utf-8" standalone="yes"?>在线91精品亚洲网站精品成人,久久亚洲国产中v天仙www,小说区亚洲自拍另类http://www.tkk7.com/zyl/好好学习Q天天向?/description>zh-cnFri, 09 May 2025 17:16:19 GMTFri, 09 May 2025 17:16:19 GMT60回顾一下最q的生活http://www.tkk7.com/zyl/archive/2009/10/25/299682.html布衣?/dc:creator>布衣?/author>Sun, 25 Oct 2009 10:49:00 GMThttp://www.tkk7.com/zyl/archive/2009/10/25/299682.htmlhttp://www.tkk7.com/zyl/comments/299682.htmlhttp://www.tkk7.com/zyl/archive/2009/10/25/299682.html#Feedback2http://www.tkk7.com/zyl/comments/commentRss/299682.htmlhttp://www.tkk7.com/zyl/services/trackbacks/299682.html     上个月开始,正式有了一份稳定收入的工作Q不Ҏ啊,好像已经是很久很久以前的事情了,当然q虽然只是一份兼职工作,但是感觉q是比较有意思,毕竟自己q是一个能做出贡献的h啊。还是很感谢我那哥们的,生病那么久了Q虽然一直做着零散的事情,不过毕竟q是没有E_的收入来源,现在可以基本解决了后之忧了?br />     q段旉Q自己做的一个开源项目,l于弄的差不多了Q不q一直懒的缘故,L写一点,停一点,q回l于q是差不多写完了Q正在恶补文档,x开源真不是一件简单的事情Q要让h家快速的接受你的东西Q还能让人家快速的学会Qƈ使用Q没有充分的文档是不行的?br />     zframeworkQ我临时取的名字Q一个简单的osgi开源框Ӟ无聊的时候,慢慢的弄h的,不知不觉已经搞了好久了。本来一直想放上ȝQ一直怕写的太隄Q被人糗QM好,所以一直在不停的重构中。估计下个月Q应该可以收工了?br />     前段旉帮h搞了一个网店的E序Q看着看着Q也x搞这斚w的东西,{完善的差不多了Q也开源算了,看看java的网店,q是没有php的多Q争取做点A献吧?br />     其实Q感觉现在生z还不错,臛_老天q是比较眷顾我的Q好几年都这么过MQ也不错了。接下来的日子,先帮哥们把网站弄hQ毕竟那是我的衣食父母,感觉有点事情也是不错的。都?的h了,是应该做点事情,不用再管什么得׃Q只要感觉不白活p了?br />     先啰嗦到q,q有Ҏ档要写,写一会就看电影去Q生zM无边?br />



]]>
osgi 入门 ?关于c装载机?/title><link>http://www.tkk7.com/zyl/archive/2009/02/17/255138.html</link><dc:creator>布衣?/dc:creator><author>布衣?/author><pubDate>Tue, 17 Feb 2009 08:49:00 GMT</pubDate><guid>http://www.tkk7.com/zyl/archive/2009/02/17/255138.html</guid><wfw:comment>http://www.tkk7.com/zyl/comments/255138.html</wfw:comment><comments>http://www.tkk7.com/zyl/archive/2009/02/17/255138.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zyl/comments/commentRss/255138.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zyl/services/trackbacks/255138.html</trackback:ping><description><![CDATA[  osgi一个最大的特色是使用不同的ClassLoader,让多个bundle׃n一个虚拟机Q而每一个bundle使用单独的ClassLoader?br /> 如下图所C:<br />  <img alt="" src="http://www.tkk7.com/images/blogjava_net/zyl/b1.gif" height="333" width="566" /><br /> 对于资源和类的装载主要包括以下三U途径Q?br /> Boot classpathQ启动类环境Q包括java.*包和相应的实现包?br /> Framework classpath:osgi框架拥有一个独立的ClassLoaderQ用于装载框架接口类Q以及相应的实现cR?br /> Bundle Space:每个bundle包括了与bundle相关的jar文gQ以及相关的资源?br /> <br /> 对于一个类的查询,主要通过以下途径q行查询Q?br /> 1.从Parent ClassLoader中装?br /> 2.从Import Package中查询类路径?br /> 3.从Required bundles中查询类<br /> 4.自nbundleQ相关ClassPath<br /> 5.相关的插件片DFragment?br /> 如下?br />  <img alt="" src="http://www.tkk7.com/images/blogjava_net/zyl/b2.gif" height="315" width="444" /><br /> q么说v来,q是比较的抽象,q是从一个实例来具体的分析?br /> 假设有如下Bundle,<br /> 相关的描q文件如下:<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">Bundle:org.zframework.core<br /> Manifest</span><span style="color: #000000;">-</span><span style="color: #000000;">Version: </span><span style="color: #000000;">1.0</span><span style="color: #000000;"><br /> Bundle</span><span style="color: #000000;">-</span><span style="color: #000000;">Name: core<br /> Bundle</span><span style="color: #000000;">-</span><span style="color: #000000;">SymbolicName: org.zframework.core;singleton:</span><span style="color: #000000;">=</span><span style="color: #0000ff;">true</span><span style="color: #000000;"><br /> Bundle</span><span style="color: #000000;">-</span><span style="color: #000000;">ClassPath: .<br /> Import</span><span style="color: #000000;">-</span><span style="color: #000000;">Package: net.sf.ehcache;version</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1.3.0</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />  net.sf.ehcache.config;version</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1.3.0</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />  net.sf.ehcache.event;version</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1.3.0</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />  org.osgi.framework;version</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1.4.0</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />  org.osgi.service.log;version</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1.3.0</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />  <img src="http://www.tkk7.com/Images/dot.gif" alt="" /><br /> Require</span><span style="color: #000000;">-</span><span style="color: #000000;">Bundle: org.eclipse.equinox.common;visibility:</span><span style="color: #000000;">=</span><span style="color: #000000;">reexport,<br />  <img src="http://www.tkk7.com/Images/dot.gif" alt="" /><br /> Export</span><span style="color: #000000;">-</span><span style="color: #000000;">Package: org.zframework.core;version</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1.0.0</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />  <img src="http://www.tkk7.com/Images/dot.gif" alt="" /></span></div> <br /> <br /> 现在创徏了如下的c:<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000ff;">package</span><span style="color: #000000;"> org.zframework.core;<br /> </span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.net.URL;<br /> </span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.util.Collection;<br /> </span><span style="color: #0000ff;">import</span><span style="color: #000000;"> net.sf.ehcache.Cache;<br /> </span><span style="color: #0000ff;">import</span><span style="color: #000000;"> net.sf.ehcache.CacheManager;<br /> </span><span style="color: #0000ff;">import</span><span style="color: #000000;"> net.sf.ehcache.Element;<br /> </span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.osgi.framework.BundleContext;<br /> </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> EhCacheManager </span><span style="color: #0000ff;">extends</span><span style="color: #000000;"> AbstractCacheManager </span><span style="color: #0000ff;">implements</span><span style="color: #000000;"><br />     BundleContextAware {<br />     </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String cacheFile;<br />     </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> BundleContext context;<br />     </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> CacheManager manager;<br />     </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Cache getCache(String cacheName) {<br />     Cache cache </span><span style="color: #000000;">=</span><span style="color: #000000;"> manager.getCache(cacheName);<br />     </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (cache </span><span style="color: #000000;">==</span><span style="color: #000000;"> </span><span style="color: #0000ff;">null</span><span style="color: #000000;">) {<br />           <img src="http://www.tkk7.com/Images/dot.gif" alt="" /><br />     }<br />     </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> cache;<br />     }<br />     <img src="http://www.tkk7.com/Images/dot.gif" alt="" /><br /> }</span></div> <br /> 假设有一个Bundle org.zframework.model需要用此c,描述如下Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">Manifest</span><span style="color: #000000;">-</span><span style="color: #000000;">Version: </span><span style="color: #000000;">1.0</span><span style="color: #000000;"><br /> Bundle</span><span style="color: #000000;">-</span><span style="color: #000000;">Name: model<br /> Bundle</span><span style="color: #000000;">-</span><span style="color: #000000;">SymbolicName: org.zframework.model;singleton:</span><span style="color: #000000;">=</span><span style="color: #0000ff;">true</span><span style="color: #000000;"><br /> Bundle</span><span style="color: #000000;">-</span><span style="color: #000000;">ClassPath: .<br /> Import</span><span style="color: #000000;">-</span><span style="color: #000000;">Package: javax.persistence;version</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1.0.0</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />   javax.persistence.spi;version</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1.0.0</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />   org.osgi.framework;version</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1.4.0</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />   <img src="http://www.tkk7.com/Images/dot.gif" alt="" /><br />  Require</span><span style="color: #000000;">-</span><span style="color: #000000;">Bundle: org.zframework.core<br /> </span></div> <br /> cModel<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000ff;">package</span><span style="color: #000000;"> org.zframework.model;<br /> </span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.net.URL;<br /> </span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.util.Collection;<br /> </span><span style="color: #0000ff;">import</span><span style="color: #000000;"> org.zframework.core.EhCacheManager ;<br /> </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Model{<br />     </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> EhCacheManager manager;<br />     </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Object getCache(String key) {<br />     Object o </span><span style="color: #000000;">=</span><span style="color: #000000;"> manager.getCache(key);<br />     </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> o;<br />     }<br />     <img src="http://www.tkk7.com/Images/dot.gif" alt="" /><br /> }</span></div> <br /> 下面单说明一下装载过E:<br /> 在装载ModelcLQ?br /> 1.对于java.*cȝ装蝲Q由相应的Boot ClassLoader 装蝲<br /> 2.装蝲EhCacheManagerQ?br />     1.在Import-Package中查询是否存在匹配中的org.zframework.core包声明,如果有,则委zorg.zframework.core包声明的Bundleq行装蝲Q本例没有,则l?br />     2.在Require-Bundle中查询所有的Export声明包,判断是否存在org.zframework.core匚w。本例中Q应该存在。如果不存在Q则执行步骤2.3<br />     3.查询本bundle的类路径Q是否有此类存在。不存在Ql?.4步骤<br />     4.查询所有的fragments bundleQ特D的bundleQ?c\径。不存在Ql?.5步骤      <br />     5.判断是否使用DynamicImport-Package: * 声明Q如果是则查询所有的bundle中声明的Export包。如果还是不存在Q则抛出ClassNotFound例外?br /> 关于DynamicImport-Package: * Q这是比较极端的讄Q一般不会推荐用,主要破坏了相关的装性?br /> 完整的类查询如下图:<br />  <img alt="" src="http://www.tkk7.com/images/blogjava_net/zyl/b3.gif" height="788" width="528" /><br /> 关于c装载机制基本就是这些,对于初学者来_q还是会有些困惑的?br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <img src ="http://www.tkk7.com/zyl/aggbug/255138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zyl/" target="_blank">布衣?/a> 2009-02-17 16:49 <a href="http://www.tkk7.com/zyl/archive/2009/02/17/255138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>osgi 入门 二之关于osgihttp://www.tkk7.com/zyl/archive/2009/02/14/254678.html布衣?/dc:creator>布衣?/author>Sat, 14 Feb 2009 08:28:00 GMThttp://www.tkk7.com/zyl/archive/2009/02/14/254678.htmlhttp://www.tkk7.com/zyl/comments/254678.htmlhttp://www.tkk7.com/zyl/archive/2009/02/14/254678.html#Feedback1http://www.tkk7.com/zyl/comments/commentRss/254678.htmlhttp://www.tkk7.com/zyl/services/trackbacks/254678.html阅读全文

]]>
osgi 入门http://www.tkk7.com/zyl/archive/2009/02/12/osgi.html布衣?/dc:creator>布衣?/author>Thu, 12 Feb 2009 12:36:00 GMThttp://www.tkk7.com/zyl/archive/2009/02/12/osgi.htmlhttp://www.tkk7.com/zyl/comments/254442.htmlhttp://www.tkk7.com/zyl/archive/2009/02/12/osgi.html#Feedback8http://www.tkk7.com/zyl/comments/commentRss/254442.htmlhttp://www.tkk7.com/zyl/services/trackbacks/254442.html阅读全文

]]>
温故而知斎ͼ回顾一下osgi bundle http://www.tkk7.com/zyl/archive/2009/02/08/253808.html布衣?/dc:creator>布衣?/author>Sun, 08 Feb 2009 12:33:00 GMThttp://www.tkk7.com/zyl/archive/2009/02/08/253808.htmlhttp://www.tkk7.com/zyl/comments/253808.htmlhttp://www.tkk7.com/zyl/archive/2009/02/08/253808.html#Feedback0http://www.tkk7.com/zyl/comments/commentRss/253808.htmlhttp://www.tkk7.com/zyl/services/trackbacks/253808.html    整理了一下,基本上的bundleq是那么几个Q?br />    osgi 核心Q?br />     org.eclipse.osgi_3.3.2
    org.eclipse.osgi.services_3.1.2
   equinox:
    org.eclipse.equinox.common_3.3.0
    org.eclipse.equinox.registry_3.3.1
    org.eclipse.equinox.http.jetty_1.0.1        (需要更斎ͼ
    org.eclipse.equinox.http.registry_1.0.1
    org.eclipse.equinox.http.servlet_1.0.1
    org.eclipse.equinox.preferences_3.2.1
    org.eclipse.equinox.log_1.0.1
    org.eclipse.equinox.preferences_3.2.1
必须的bundle:
    org.mortbay.jetty_5.1.11                Q需要更斎ͼ
    javax.servlet_2.4.0                    Q可选更斎ͼ
    org.apache.log4j_1.2.9
    org.apache.commons.logging_1.0.4
spring bundle:
    org.springframework.spring_2.5.2            Q可选更斎ͼ   
    org.springframework.bundle.osgi.extender_1.0.2    Q可选更斎ͼ
    org.springframework.bundle.osgi.core_1.0.2    Q可选更斎ͼ
看了看一个基本的应用需要这么多bundleQ也够呛的,q还不算上hibernate,webwork,{其他第三方jar.




]]>
该是考虑做点事情?/title><link>http://www.tkk7.com/zyl/archive/2009/02/07/253730.html</link><dc:creator>布衣?/dc:creator><author>布衣?/author><pubDate>Sat, 07 Feb 2009 12:28:00 GMT</pubDate><guid>http://www.tkk7.com/zyl/archive/2009/02/07/253730.html</guid><wfw:comment>http://www.tkk7.com/zyl/comments/253730.html</wfw:comment><comments>http://www.tkk7.com/zyl/archive/2009/02/07/253730.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zyl/comments/commentRss/253730.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zyl/services/trackbacks/253730.html</trackback:ping><description><![CDATA[<div style="font-size: 14px; line-height: 30px;">  荒废了很长时间了Q看了看上次写的blogQ还是去q?月䆾的,x也停了太长时间了。想惌一q间Q不知道在做些什么,技术资料也看了不少Q不q真正能够掌握的又实在太,L停留在表面,而不L入?009了,也快30而立了,对于一个老程序员来说Q也C和黄金年龄说再见的时候了。{行想惻I也不太可能,向管理发展,q是不太靠谱Q所以还是l做自己的老本行,t踏实实写程序吧?br />   想了?009该做的几件事情,<br />     1Q还是losgi之\Q毕竟前面已l做了很多了Qsoa太遥q,毕竟q是osgi实在。原先做的osgi web框架太ؕQ还是采用webwork2作ؓ基本的web框架Q或者用xwork2作ؓ核心Q用部分struts引擎?br />       2.研究一下规则引擎,看看jboss的rule<br />       3.复习一下工作流引擎Q好几年没有玩了Q从以前的jbpm 到osworkflowQ试试能不能和osgi整合<br />     4.Z个稳定的ajax框架Qext效率实在低下Q还是找别的?br />       5.熟悉熟悉soaQ虽然soa概念大于技术,不过q是需要看看的<br />   基本的工作也p些了Q如果能搞定q些Q这一q基本上q是会有收获了?br /> <br /> <br /> </div> <img src ="http://www.tkk7.com/zyl/aggbug/253730.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zyl/" target="_blank">布衣?/a> 2009-02-07 20:28 <a href="http://www.tkk7.com/zyl/archive/2009/02/07/253730.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于服务端生成js的构?/title><link>http://www.tkk7.com/zyl/archive/2008/01/02/extjs.html</link><dc:creator>布衣?/dc:creator><author>布衣?/author><pubDate>Wed, 02 Jan 2008 10:36:00 GMT</pubDate><guid>http://www.tkk7.com/zyl/archive/2008/01/02/extjs.html</guid><wfw:comment>http://www.tkk7.com/zyl/comments/172279.html</wfw:comment><comments>http://www.tkk7.com/zyl/archive/2008/01/02/extjs.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/zyl/comments/commentRss/172279.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zyl/services/trackbacks/172279.html</trackback:ping><description><![CDATA[    研究了ext很久了,一直想为ext直接装一个服务端lg。考虑到extlg的构建都是需要用js来完成,那么服务端生成的代码也就是js而不是html?br />     如果采取UAjax的方式,cM于Echo2的构造,不过q样对于Session可能是一个负担,同时可能会造成服务端的拥堵。不q用纯Ajax有个好处Q就是js只需要装载一ơ就行了。而如果用各个不同的面方式Q则需要多ơ装载ext的js文gQ这对于|络也是一个压力?br />     不过创徏的初P此框架主要还是用于内部|,q样对于性能斚w的担心可以略q了?br />     设计程如下Q?br />     cM于Jsf的请求流E?提供LifecycleQ基本上也就五个生命周期Qapply request,process validators,update model,invokeAction,render ajax?br />     先不考虑其他的生命周期,先来处理render ajax部分。基本构思还是以render xmlZQ主要的格式如下Q?br />      <br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000ff;"><</span><span style="color: #800000;">message </span><span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="http://www.esoft.org/servermessage"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;">  <</span><span style="color: #800000;">lib</span><span style="color: #0000ff;">><br />     <</span><span style="color: #800000;">js </span><span style="color: #ff0000;">url</span><span style="color: #0000ff;">="widgets/ext-component"</span><span style="color: #0000ff;">/><br />   </</span><span style="color: #800000;">lib</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;">  <</span><span style="color: #800000;">script</span><span style="color: #0000ff;">></span><span style="color: #000000;">Ext.QuickTips.init();</span><span style="color: #0000ff;"></</span><span style="color: #800000;">script</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;">  <</span><span style="color: #800000;">content </span><span style="color: #ff0000;">cid</span><span style="color: #0000ff;">="W9"</span><span style="color: #0000ff;">><</span><span style="color: #800000;">div </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="W39"</span><span style="color: #0000ff;">/></</span><span style="color: #800000;">content</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;">  <</span><span style="color: #800000;">remove</span><span style="color: #0000ff;">></span><span style="color: #000000;">Ext.get('W29').remove();</span><span style="color: #0000ff;"></</span><span style="color: #800000;">remove</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">message</span><span style="color: #0000ff;">></span></div> <br /> lib 中主要用来装载ext的各个组件js,q样不需要一ơ装载?br /> scriptQ主要的执行js脚本<br /> content用于创徏相应的html<br /> remove相应的删除js脚本<br /> <br /> Z么需要增加remove而不是把所有的脚本都放在script中?br /> q是׃整个处理都在一个页面中Qؓ了能按照序执行相应的脚本,remove的脚本需要优先执行,当两个组件不停的切换的时候?br /> <br /> client 对于脚本的解析流E如下:<br /> 首先分批装蝲js url<br /> 当所有的js装蝲完成?br /> 执行remove 脚本<br /> 遍历content,增加相应的html node<br /> 执行script脚本?br /> <br /> 对于面的生成,基本上没有什么问题?br /> 只是如果采用q种方式Q可能目前来说只能依赖于extq个框架Q对于服务端的灵zL也大打折扣,不过既然是ؓ了ext而做的,那也无所谓了?br /> <br /> 不知道各位对q种生成方式有什么不同意见,期待讨论?br /> <img src ="http://www.tkk7.com/zyl/aggbug/172279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zyl/" target="_blank">布衣?/a> 2008-01-02 18:36 <a href="http://www.tkk7.com/zyl/archive/2008/01/02/extjs.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ext 之我?/title><link>http://www.tkk7.com/zyl/archive/2007/12/28/ext.html</link><dc:creator>布衣?/dc:creator><author>布衣?/author><pubDate>Fri, 28 Dec 2007 11:01:00 GMT</pubDate><guid>http://www.tkk7.com/zyl/archive/2007/12/28/ext.html</guid><wfw:comment>http://www.tkk7.com/zyl/comments/171285.html</wfw:comment><comments>http://www.tkk7.com/zyl/archive/2007/12/28/ext.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.tkk7.com/zyl/comments/commentRss/171285.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zyl/services/trackbacks/171285.html</trackback:ping><description><![CDATA[<div style="font-size: 14px; line-height: 30px;">    最q的q段旉Q感觉Ext挺火的。接触Extq是半年前的事情了,那时候就惛_Extq行装Q做一个服务端的Ajax框架出来。可׃w体的原因,q是搁浅了?br />     使用Ext是从1.1开始的Q那时候觉得ExtQ几乎已l简化了所有的客户端脚本。就不会jsQ不会AjaxQ用Ext也可以很Ҏ的搭Z错的面。而且Ext在兼Ҏ上面做的也不错,臛_我在ie 6,ie 7 ff和opera 9上运行demo的时候基本上没有什么问题。当然最主要的一个吸引我的因素是Q和其他的框架相比,Ext的界面做的比较的Q就观而言Q算是perfect了?br />     随着Ext 2.0的正式发布,xExt的h也越来越多。Ext变得来大众化Q这是一件值得高兴的事情,毕竟使用Ext能够帮助化不的js代码Q而且对于html代码的编写,是数量的减?br />     让数据和内容分离Q一直是Ajax所提倡的Q而Ext可以完全做到q些。Grid作ؓ表示lg而Store作ؓ数据存储Q数据可以通过Reader来读取,包括xml和jsonQ或者其它的自定义实现?br />     lg化,q是Ext最大的特色。所有的lg都承Ext.Componentq个基础cR而Ext.Componentl承Ext.util.ObservableQ让lg事g的处理变得更为的强大和灵zRExt可以模拟所有的桌面事gQ如双击Q拖拽,q些只有在桌面程序中才见到的Q而这些事件的处理变得和桌面程序一L捗?br />     动画以及控g的resize和dragQ这些比较难处理的jsQ在Ext中变得实在很z。基本的Window都有drag和resize行ؓQ动L是简单。当然这些功能只是次要的。不q在ria中,q些功能又都是不能缺的?br />     当然Ext的诟病也不少Q如性能Q这个在览器中关键的因素。完整的Ext.js需?00多kQ随着宽带的普及,以及Ajax技术的应用Q这个应该不成ؓ问题。真正的问题在于Ext都是使用js构徏面Q其中的html代码Q可能比较的J琐Q过多的div的用,可能也会是一个灾难。如Ext.Buttonq个lg的表现层一栗当然Ext也提供了自定义的html模板功能Q这个问题也可能不是问题了。最后毕竟Ext只是一个客L的组件实玎ͼ和服务端的集成,q需要自己实现。不qExt在这个方面,也提供了很多的简化功能,如gq装载,数据d{?br />     当然Q个是比较的看好ExtQ希望这个框架能够越走越好?br /> <br /> </div> <img src ="http://www.tkk7.com/zyl/aggbug/171285.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zyl/" target="_blank">布衣?/a> 2007-12-28 19:01 <a href="http://www.tkk7.com/zyl/archive/2007/12/28/ext.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回来?/title><link>http://www.tkk7.com/zyl/archive/2007/12/27/gx.html</link><dc:creator>布衣?/dc:creator><author>布衣?/author><pubDate>Thu, 27 Dec 2007 11:00:00 GMT</pubDate><guid>http://www.tkk7.com/zyl/archive/2007/12/27/gx.html</guid><wfw:comment>http://www.tkk7.com/zyl/comments/170971.html</wfw:comment><comments>http://www.tkk7.com/zyl/archive/2007/12/27/gx.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/zyl/comments/commentRss/170971.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zyl/services/trackbacks/170971.html</trackback:ping><description><![CDATA[<div style="font-size:14;line-height:30px">   很久没有更新了,׃q去的半q都在医院呆着Q也没有时间去l护自己的blog了。不q发现浏览的是挺多的Q有点对不v大家Q毕竟没有办法回复?br />   半年q去了,看了看网上的技术,q好新的东东不太多,不然又得需要花费大量的旉d了。不q,现在对于新的技术,也没有以前那U热情了Q其实搞软g的还是得要踏t实实的打好基础Q毕竟内늚东西都差不多Q不像硬Ӟ更新的速度实在跟不上?br />   ~程也好多年了,看着周围的hQ基本上都已l从~程开始{向管理,在国内就是这栗不q我q是不想攑ּQl做一个程序员Ql开发。喜Ƣ编E没有理由,看着一行行的代码,内心L有种莫名的喜悦,毕竟q是自己创造的。就像小时候搭U木一P完成后L感觉很有成就感?br />   当然Q这U感觉,有时候可能会被压抑。在公司的时候,老是重复着基本的东西,失去了创造的乐趣。而今d了公司,l于不再感觉压抑Q做一个自qE序员是快乐的,不过也可能是悲哀的。ؓ什么h家老外能写出那么好的程序,而看看国内,好的E序真的不多Q同样都是搞E序的,差别怎么能这么大Q可能这是环境的缘故吧?br />    在住院的时候,只要有时间还是会写几行代码,虽然w体不允许,不过q是没有办法停止。也许这是E序员的天性,d了程序,我发现我做别的都没有什么兴。而今Q已l离开了医院,又可以开始自qE序员生涯,不过真的不想再去公司任职了,虽然在经上可能会有点压力,不过我还是喜Ƣ做一个自qE序员,认真地做一些自己想做的东西?br />    <br />   <br /> <br /> </div> <img src ="http://www.tkk7.com/zyl/aggbug/170971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zyl/" target="_blank">布衣?/a> 2007-12-27 19:00 <a href="http://www.tkk7.com/zyl/archive/2007/12/27/gx.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsf中的 国际化,验证和{?/title><link>http://www.tkk7.com/zyl/archive/2007/05/24/119705.html</link><dc:creator>布衣?/dc:creator><author>布衣?/author><pubDate>Thu, 24 May 2007 05:26:00 GMT</pubDate><guid>http://www.tkk7.com/zyl/archive/2007/05/24/119705.html</guid><wfw:comment>http://www.tkk7.com/zyl/comments/119705.html</wfw:comment><comments>http://www.tkk7.com/zyl/archive/2007/05/24/119705.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zyl/comments/commentRss/119705.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zyl/services/trackbacks/119705.html</trackback:ping><description><![CDATA[    q些东东Q对于web框架来说Q是必不可少的,来看看jsf是如何实现的。首先看一下国际化Q默认的情况下,会选择默认的localeQ以及相应的资源文g。当然可以通过以下方式q行配置Q?br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;"><</span><span style="color: #800000;">application</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br></span><span style="color: #0000ff;"><</span><span style="color: #800000;">locale-config</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br></span><span style="color: #0000ff;"><</span><span style="color: #800000;">default-locale</span><span style="color: #0000ff;">></span><span style="color: #000000;">en</span><span style="color: #0000ff;"></</span><span style="color: #800000;">default-locale</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br></span><span style="color: #0000ff;"><</span><span style="color: #800000;">supported-locale</span><span style="color: #0000ff;">></span><span style="color: #000000;">en</span><span style="color: #0000ff;"></</span><span style="color: #800000;">supported-locale</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br></span><span style="color: #0000ff;"><</span><span style="color: #800000;">supported-locale</span><span style="color: #0000ff;">></span><span style="color: #000000;">es</span><span style="color: #0000ff;"></</span><span style="color: #800000;">supported-locale</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br></span><span style="color: #0000ff;"></</span><span style="color: #800000;">locale-config</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br></span><span style="color: #0000ff;"><</span><span style="color: #800000;">message-bundle</span><span style="color: #0000ff;">></span><span style="color: #000000;">CustomMessages</span><span style="color: #0000ff;"></</span><span style="color: #800000;">message-bundle</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br></span><span style="color: #0000ff;"></</span><span style="color: #800000;">application</span><span style="color: #0000ff;">></span></div> <br>资源文gQ也是和其他web应用一致?br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">halloween</span><span style="color: #000000;">=</span><span style="color: #000000;">Every day is like Halloween.<br>numberOfVisits</span><span style="color: #000000;">=</span><span style="color: #000000;">You have visited us {</span><span style="color: #000000;">0</span><span style="color: #000000;">} time(s)</span><span style="color: #000000;">,</span><span style="color: #000000;"> {</span><span style="color: #000000;">1</span><span style="color: #000000;">}. Rock on!<br>toggleLocale</span><span style="color: #000000;">=</span><span style="color: #000000;">Translate to Spanish<br>helloImage</span><span style="color: #000000;">=</span><span style="color: #000000;">../images/hello.gif</span></div> <br><br>如果需要在面中用相应的bundleQ需要用以下的标记Q?br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;"><</span><span style="color: #800000;">f:loadBundle </span><span style="color: #ff0000;">basename</span><span style="color: #0000ff;">="LocalizationResources"</span><span style="color: #ff0000;"> var</span><span style="color: #0000ff;">="bundle"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br></span><span style="color: #0000ff;"><</span><span style="color: #800000;">h:outputText </span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="#{bundle.halloween}"</span><span style="color: #0000ff;">/></span></div> <br><br>当然q是使用默认的locale讄Q如果想动态切换localeQ目前我的处理方式是q样的:<br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;"><</span><span style="color: #800000;">f:loadBundle </span><span style="color: #ff0000;">basename</span><span style="color: #0000ff;">="messages_#{localeBean.locale}"</span><span style="color: #ff0000;"> var</span><span style="color: #0000ff;">="msg"</span><span style="color: #0000ff;">/></span></div> <br>当然localeBean.locale的值是动态更改的Q可以ؓen,zh_CNQ等{?br>个h觉得和spring 的web framework相比Q没有spring的那么灵z,不过基本上都能解决问题,凑合着用吧?br><br>如果惛_代码中用,q是需要用以下方法:<br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> String getMessageString(String name, Object<img src="http://www.tkk7.com/Images/dot.gif"> params) {<br>    String str </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">""</span><span style="color: #000000;">;<br>    FacesContext facesContext </span><span style="color: #000000;">=</span><span style="color: #000000;"> FacesContext.getCurrentInstance();<br>    String bundleName </span><span style="color: #000000;">=</span><span style="color: #000000;"> facesContext.getApplication().getMessageBundle();<br>    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (bundleName </span><span style="color: #000000;">!=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">null</span><span style="color: #000000;">) {<br>        Locale locale </span><span style="color: #000000;">=</span><span style="color: #000000;"> facesContext.getViewRoot().getLocale();<br>        ResourceBundle bundle </span><span style="color: #000000;">=</span><span style="color: #000000;"> ResourceBundle.getBundle(bundleName,<br>            locale, getCurrentClassLoader(params));<br>        str </span><span style="color: #000000;">=</span><span style="color: #000000;"> bundle.getString(name);<br>    }<br>    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> str;<br>    }</span></div> <br>    对于验证机制Q基本的接口为Validator,只有一个方法validate。通常的验证机Ӟ都是通过服务端来实现。如果想支持客户端支持,估计q得自己写一套接口去替换。不q看了其生命周期Q觉得很隑֮玎ͼ除非q其生命周期。当Ӟq些使用ajax来处理,可能会减服务端的通信负担?br>   光认的验证实现Q包括以下几个:<br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">   DoubleRangeQ?/span><span style="color: #0000ff;"><</span><span style="color: #800000;">f:validateDoubleRange</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br>      LengthQ?/span><span style="color: #0000ff;"><</span><span style="color: #800000;">f:validateLength</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br>      LongRangeQ?/span><span style="color: #0000ff;"><</span><span style="color: #800000;">f:validateLongRange</span><span style="color: #0000ff;">></span></div> <br>   从字面意思可以看出来?br>   当然Q每个组仉有默认的验证器required。只要设|其属性ؓtureQ就会进行空值判断?br>   <br>   对于lg来说Q支持多个验证器。但是没有看到关联组件的验证器,需要自己实现。如password的是否一?br><br>   cd转换Q接口ConverterQ包括两个方?<br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Object getAsObject(FacesContext context, UIComponent component,<br>                              String value);<br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String getAsString(FacesContext context, UIComponent component,<br>                              Object value);</span></div> <br>   <br>  前者{化ؓ对象Q后者ؓ用于面输出?br>  在进行验证前Q都会先q行D{换?br>  对于转换,内部已经提供了基本类型的实现Q包括数字,日期Qboolean型?br>  当然Converter另外一个功能,是提供格式化输出,支持NumberFormat和DateFormat的输出:<br>  包括Q?lt;f:convertDateTime>?lt;f:convertNumber pattern="###,###.##;(###,###.##)"/>其样式,完全采用相应的java样式?br><br><br><br><br><img src ="http://www.tkk7.com/zyl/aggbug/119705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zyl/" target="_blank">布衣?/a> 2007-05-24 13:26 <a href="http://www.tkk7.com/zyl/archive/2007/05/24/119705.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>velocity ?开发篇http://www.tkk7.com/zyl/archive/2007/05/17/117957.html布衣?/dc:creator>布衣?/author>Wed, 16 May 2007 23:34:00 GMThttp://www.tkk7.com/zyl/archive/2007/05/17/117957.htmlhttp://www.tkk7.com/zyl/comments/117957.htmlhttp://www.tkk7.com/zyl/archive/2007/05/17/117957.html#Feedback0http://www.tkk7.com/zyl/comments/commentRss/117957.htmlhttp://www.tkk7.com/zyl/services/trackbacks/117957.html
在应用中使用velocityQ一般需要以下的几个步骤Q?

* 初始化Velocity,可以使用单例Q或者运行期实例
* 创徏context对象Q用于包括相应的变量
* 在context中增加相应的数据
* 选择模板
* 合ƈ模板Q生输?

  阅读全文

]]>
关于velocity 一语法?/title><link>http://www.tkk7.com/zyl/archive/2007/05/14/117215.html</link><dc:creator>布衣?/dc:creator><author>布衣?/author><pubDate>Mon, 14 May 2007 00:30:00 GMT</pubDate><guid>http://www.tkk7.com/zyl/archive/2007/05/14/117215.html</guid><wfw:comment>http://www.tkk7.com/zyl/comments/117215.html</wfw:comment><comments>http://www.tkk7.com/zyl/archive/2007/05/14/117215.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/zyl/comments/commentRss/117215.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zyl/services/trackbacks/117215.html</trackback:ping><description><![CDATA[    一个古老而又强大的模版引擎。在模版引擎?velocity中,应该属于最常用的,不管是在maven的项目模版,q是在源代码输出Q甚至直接网输ZQ都可以看到其n影。当Ӟ最q的freemarker大有q_天下之意?br>   以前的时候,曄velocity设计q一个自动代码的目Q在用的q程中,享受了其单而又灉|的功能。后来由于,自动代码的项目一直没有什么进展,也就很少d注velocity。这D|_被jsf搞得焦头烂额Q最后想起了velocityQ看看能不能用其来实现替换jsf的标记库功能。于是又复习了一遍velocity?br>   先来看看velocity的语法:vtl也就是velocity的基本语a.用过脚本语言的,对于q个应该会很Ҏ上手Q其实,基本上,语法可以分ؓ变量和关键词。先来看看变量,变量使用$作ؓ开头符P$a ?{a}是一致的。类gjstl中的变量定义。在模版中声明一个变量是很容易的Q用set关键?br>   #set( $foo = "Velocity" )。对于velocity中,感觉比较灉|的就是变量中Q可以直接用方法,和javabean属性一h便用:<br>   对于javabean 支持内置属性,如下Q?customer.AddressQ?purchase.TotalQ?customer.Address.phone。不q好像不支持map语法Q如Q?br>a["key"]q种写法。但是可以用方法代替:a.get("key")。而用了ҎQ感觉就在用java代码一hѝ当然变量中支持单的表达式计:$a+1{等<br>   有一炚w要注意的是,如果变量没有解析Q还是会输出$aq个变量Q而不是空白,或者报错,q一点,不知道是方便q是不方ѝ?br>   语法中另外一个,是关键字了Q关键字使用#开头?br>   其关键字也不多,只有数的几个,但是已经_用了。如前面的声明变量:#set<br>   #if #elseif #else  #end q是最常用的条件判断,每个判断使用#endl尾<br>   #if($a==1)true enough#{else}no way!#end<br><br>   #foreach() #end用于循环输出<br>   #foreach( $key in $allProducts.keySet() )<br>    <li>Key: $key -> Value: $allProducts.get($key)</li><br>   #end<br>   <br>   #includeQ用于包括一些资源文Ӟ当然include是不会去解析资源文gQ这?parse不同<br>   #include( "one.txt" )<br><br>   #parseQ用于解析ƈ且包括相应的资源文g<br>   #parse( "me.vm" )Q和L件共享相应的Context<br>   <br>   #stop,用于停止执行解析Qƈq回Q主要用于调试功能?br><br>   基本上,使用以上的语法,可以定义ZQ何的模版了。当ӞZ化模版的定义QvelocityҎ推出?macroq个强大的功?<br>   #macroQ类g宏定义,用于自定义相应的标记?br>   如下定义了一D宏Q用于输g的列?br>   #macro( tablerows $color $somelist )<br>    #foreach( $something in $somelist )<br>        <tr><td bgcolor=$color>$something</td></tr><br>    #end<br>   #end<br>   <br>   在模版中Q只需要?tablerows($color $somelist)可以取代里面的代码了:<br>   #set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] )<br>   #set( $color = "blue" )<br>  <table><br>     #tablerows( $color $greatlakes )<br>  </table><br>  <br>   而且#macro 支持内嵌语法Q所以对于模版的定义Q就变得更加的灵z而简单了?br>   <br><br><br><img src ="http://www.tkk7.com/zyl/aggbug/117215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zyl/" target="_blank">布衣?/a> 2007-05-14 08:30 <a href="http://www.tkk7.com/zyl/archive/2007/05/14/117215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于jsf 的标记库http://www.tkk7.com/zyl/archive/2007/05/09/116270.html布衣?/dc:creator>布衣?/author>Wed, 09 May 2007 12:33:00 GMThttp://www.tkk7.com/zyl/archive/2007/05/09/116270.htmlhttp://www.tkk7.com/zyl/comments/116270.htmlhttp://www.tkk7.com/zyl/archive/2007/05/09/116270.html#Feedback4http://www.tkk7.com/zyl/comments/commentRss/116270.htmlhttp://www.tkk7.com/zyl/services/trackbacks/116270.html  对于标记库,不想再说些什么了。jsf可能最大的毛病都在q个标记库上面,首先定义的标记在jsp中,q不起到相应的输出功能,而只是用来增加相应得lg。在jsf中,最上层的组件ؓUIViewRootQ基本上所有的操作都是需要围l着此组件。而标记库的存在,只是Z化相应的操作。如下的标记Q?br>
<f:view>
    
<h:form>
     
<h:panelGrid>
        .   
    
</h:panelGrid>
       
</h:form>
</f:view>

其实对应的java代码Q如下:
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot root 
= context.getViewRoot();
HtmlForm form 
= new HtmlForm();
HtmlPanelGrid grid 
= new HtmlPanelGrid();
form.getChildren().add(grid);
root.getChildren().add(form);

也就是说没有标记库,我完全可以用java代码完成?br>    那么标记库的存在到底有没有意义,意义可能在于简化相应的操作Q想想html的属性是比较多的Q如果每个都要用java代码LӞ那么可能对于应用来说Q显得很不灵z,因ؓ改代码毕竟没有改jsp来的快。而且代码需要重新编译。所以jsf的标记库存在也是有点意义的?br>可是Q现在的问题是,׃jsf本n是规范Q其实现也就会各有不同,对于每种实现都会带有自己的那一套标记库Q随着标记库的增加Q对于用者来_也是不堪忍受的重负。所以,有些时候,如果需要动态做一些配|,那么q是丢弃标记库,用java代码来完成吧。当然faceletsQ提供了一U方式,用于很灵zȝ扩展多个标记库,可是Q看着那么多的标记QLq有些头疹{?br>
    其次Q对于标记库来说Q各个标记库的不兼容也是一个很大的问题。就拿jstl和jsf来说Qjstl的变量声明,在jsf中肯定是没有办法解析的,同样jsf中的变量Q在jstl中也不能认识。我指的是页面声明的变量Q而不是session变量Q如下的例子Q?br>
<h:dataTable styleClass="table-background"
                                 rowClasses
="table-odd-row,table-even-row"
                                 cellpadding
="3"
                                 value
="#{recordBean.records}"
                                 var
="record"
                                 binding
="#{recordBean.recordData}">
   
<c:if test="${record}">
     
   
</c:if>
</h:dataTable>

在dataTable中声明了变量recordQ但是在jstl中是不会认识的?br>    可能q个问题Qfacelets已经解决了,主要facelets把所有的Elcontext中的变量都结合在了一P使用自n的FaceletsContext?br>不过Q如果我只是需要简单的功能Q还需要用faceletsQ那么也有点大材小用了。况且facelets也只是提供了cMtiles的功能?br>最后,惌的是Q虽然jsf目前的ide支持Q比其他框架多多了。可惜,人家都是建立在相应的标记库上的,如果你定义了自己标记库,人家不一定会认识。所以标记库的存在,对于jsf来说Q也许ƈ不一定是好事情,可能sun觉得如果把jsp抛弃了,有点可惜。所以在升jsf的同Ӟ也升U了相应得jsp规范?br>    个h觉得Q也许模版技术,可能也会是一U选择Q看看velocity和freemarkerQ觉得其比jsp有优势多了?br>


]]>
关于jsf 生命周期http://www.tkk7.com/zyl/archive/2007/05/04/115316.html布衣?/dc:creator>布衣?/author>Fri, 04 May 2007 07:44:00 GMThttp://www.tkk7.com/zyl/archive/2007/05/04/115316.htmlhttp://www.tkk7.com/zyl/comments/115316.htmlhttp://www.tkk7.com/zyl/archive/2007/05/04/115316.html#Feedback3http://www.tkk7.com/zyl/comments/commentRss/115316.htmlhttp://www.tkk7.com/zyl/services/trackbacks/115316.html    q是jsf 的分析系列第三篇Q随着不断的深入,jsf的设计变得越来越清晰。当Ӟ在目前的规范中,jsfq是很不完善的,q也导致了Z么jsfq是不能成ؓ目前的主框架。先不去谈论q些弊端Q还是先看看一下jsf具体是如何运作的?br>    对于jsf规范Q个得和其他框架相比Q最大的区别Q可能在于jsf划分了web h的生命周期。like ejb一Pweb h也是有生命周期的。虽Ӟ在其他的框架中,也可以看到相关的生命周期Q但q是没有jsf划分的清晰。也许,q也是jsf的一大特艌Ӏ?br>    对于生命周期的执行,所有的操作都归l到Lifecycleq个接口。接口包括了两个主要的方法:
    public abstract void execute(FacesContext context) throws FacesException;?br>    public abstract void render(FacesContext context) throws FacesException;
   前者是用来执行各个生命周期的阶D,也就是除了render之外的其他五个阶D,而且是按照相应的序执行。而renderQ是执行最后一个阶D,展示面。可能有Z太理解,Z么不把两个方法合q成一个方法,刚开始,我也是这么认为。既然已l定义了相应的PhaseQ何必要把最后的renderq程分离出来。看了sun 的RI实现c,发现在render之前需要进行context.getResponseComplete()判断Q可能规范中Q认为render是必要执行的阶D,其他的阶D可以蟩q,所以分M相应的方?同时在执行前,Z避免重复输出,需要对renderq程q行Ҏ的处?
   规范中定义了6个阶D,从下面的程图中可以看到?br>
单介l一下每个阶D늚工作Q?br>
RESTORE_VIEWQ?/span>查找原有的view Q恢复原有的状态,如果没有Q则调用ViewHandler.createViewQ如果ؓpost操作Q则按照序执行各个阶段?br>否则执行RENDER_RESPONSE阶段?br>APPLY_REQUEST_VALUESQ?/span>d客户端参敎ͼ处理各个lg的processDecodesҎQ内部调用decodeҎQ由Renderer执行decodeҎ
PROCESS_VALIDATIONSQ?/span>执行lg的processValidatorsҎQ对于UIInput执行validateҎQ用于绑定|调用convert,和validate
UPDATE_MODEL_VALUES:执行lg的processUpdatesҎQ对于UIViewRootQ执行broadcastEvents和notifyPhaseListeners
所有的UIInput,执行updateModelҎ?br>INVOKE_APPLICATIONQ?/span>调用UIViewRoot.processApplicationҎ。这一q程主要d相应的action配置Q如果存在actionQ则调用actionQ也是调用应用逻辑。在执行完相应的逻辑后,查询action是否q回|如果有,由navigationHandler去读取下一个view id?br>RENDER_RESPONSEQ?/span>展示viewQ调用ViewHandler.renderView,展示view?br>
每个阶段定义定义的都比较清晰Q有一炚w要注意的是,在处理请求时Qƈ不一定会执行每个阶段Q可能其中会直接跛_最后的render response阶段。D例来_如果validatorӞ存在错误信息Q那么就会直接到render response阶段Q而下一个阶D不会执行?br>



]]>
了解jsf的架构二http://www.tkk7.com/zyl/archive/2007/04/25/113562.html布衣?/dc:creator>布衣?/author>Wed, 25 Apr 2007 08:33:00 GMThttp://www.tkk7.com/zyl/archive/2007/04/25/113562.htmlhttp://www.tkk7.com/zyl/comments/113562.htmlhttp://www.tkk7.com/zyl/archive/2007/04/25/113562.html#Feedback2http://www.tkk7.com/zyl/comments/commentRss/113562.htmlhttp://www.tkk7.com/zyl/services/trackbacks/113562.html    component:所有的基本lg都在其中Q如下的主要cdQ对于各个组件就不一一详细介绍了。主要介l一下几个接口:



StateHolderQ用于表C在h之间需要保存相应的状态信?必须实现saveState和resotreStateҎ?br>ValueHolderQ用于支持本地值的保持Q用于访问model数据Q通过表达式,支持转换?br>EditableValueHolderQ用于表C那些可以编辑的lg?br>ActionSourceQ由UIComponet实现Q用于作为ActionEvent的事件源Q支持默认的ActionListener调用
ActionSource2Q这是最q的规范中增加的Q提供了对于MethodExpression的支持?br>ContextCallbackQ用于组件执行相应的回调
NamingContainerQ标志接口,表示容器lg

    convert:包括了主要的Convert接口Q以及内|的Convert实现c,主要的作用用于在面值绑定时Q进行类型的转换工作
    validatorQ主要的验证包,定义了通过的Validator接口Q以及简单的几个验证cR默认情况下Qjsf都是q行服务端验证,如果想需要客L验证Q暂时从规范中,q没有找出相应的解决Ҏ。不q现在已l是Ajax时代了,使用异步的传输,从效果上已经接近于客L之间验证?br>    event:主要的事件体pR个得jsf的事件体p还是比较弱的。和强大的Swing事g体制相比Q那直差q了。而且jsf默认使用一个ActionListener来委z所有的客户端动作触发。大多数的调用都是用MethodExpression来进行?br>    model:只是加强了对于DataTable的支持,以及SelectItems?br>    renderQ主要的展示包,当然只是提供规范Q具体由实现cL供。对于RendererQ都需要一套RenderKit.而RenderKit由RenderKitFactory理。ResponseStateManagerQ作为StateManager的帮助类Q进行主要的State操作?br>    基本上,规范也就q么些东东。从整体来看Qƈ不算太复杂。可惜现在的jsf实现实在太多了,而且各个实现q不一定兼容,D了jsf世界的庞大?br>   




]]>
վ֩ģ壺 99ƷƷ| ѿٸƵ| www.xxxx.comձ| 91ƷվƷ| youjizz| ĻþþƷ1| ..ŷ| ƷĻƵ| ձһ | պƵ߾ƷƵѹۿ| 99ѹۿƵ| ձxxxx| ֻˬִַ̼ | Ļȫ| 99ѹۿ| װ׹Ƶ| avƬѿ | ˾ҹƵ| av뾫Ʒվ| ɫ͵͵ۺAVYP| Ʒһѿ| ëƬȫһ| 91Ʒһ鶹 | þۺɫһ| ޾ƷƵۿ| ޾ƷƵѹۿ| Ʒsmվ| ޵ӰպƷ | ޸һƷ| ޾ƷƵѹۿ| ߹ۿƵѹ| һƬ߹ۿ| AVƬ߹ۿ| þü޾Ʒ?V| AVAV̾þ| ˻ƶվƵ| ۺͼƬС˵Ⱦþ| þѸƵ| AVþþƷݺݰ˳| ߹ۿ91| ޾Ʒva߹ۿѿ|