??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美中文高清,台湾av在线二三区观看,欧美一区二区免费视频http://www.aygfsteel.com/zyl/archive/2007/05/17/117957.html布衣?/dc:creator>布?/author>Wed, 16 May 2007 23:34:00 GMThttp://www.aygfsteel.com/zyl/archive/2007/05/17/117957.htmlhttp://www.aygfsteel.com/zyl/comments/117957.htmlhttp://www.aygfsteel.com/zyl/archive/2007/05/17/117957.html#Feedback0http://www.aygfsteel.com/zyl/comments/commentRss/117957.htmlhttp://www.aygfsteel.com/zyl/services/trackbacks/117957.html
在应用中使用velocityQ一般需要以下的几个步骤Q?

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

  阅读全文

]]>
关于velocity 一语法?/title><link>http://www.aygfsteel.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.aygfsteel.com/zyl/archive/2007/05/14/117215.html</guid><wfw:comment>http://www.aygfsteel.com/zyl/comments/117215.html</wfw:comment><comments>http://www.aygfsteel.com/zyl/archive/2007/05/14/117215.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zyl/comments/commentRss/117215.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.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.aygfsteel.com/zyl/aggbug/117215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zyl/" target="_blank">布?/a> 2007-05-14 08:30 <a href="http://www.aygfsteel.com/zyl/archive/2007/05/14/117215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于jsf 的标记库http://www.aygfsteel.com/zyl/archive/2007/05/09/116270.html布?/dc:creator>布衣?/author>Wed, 09 May 2007 12:33:00 GMThttp://www.aygfsteel.com/zyl/archive/2007/05/09/116270.htmlhttp://www.aygfsteel.com/zyl/comments/116270.htmlhttp://www.aygfsteel.com/zyl/archive/2007/05/09/116270.html#Feedback3http://www.aygfsteel.com/zyl/comments/commentRss/116270.htmlhttp://www.aygfsteel.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.aygfsteel.com/zyl/archive/2007/05/04/115316.html布?/dc:creator>布?/author>Fri, 04 May 2007 07:44:00 GMThttp://www.aygfsteel.com/zyl/archive/2007/05/04/115316.htmlhttp://www.aygfsteel.com/zyl/comments/115316.htmlhttp://www.aygfsteel.com/zyl/archive/2007/05/04/115316.html#Feedback2http://www.aygfsteel.com/zyl/comments/commentRss/115316.htmlhttp://www.aygfsteel.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.aygfsteel.com/zyl/archive/2007/04/25/113562.html布衣?/dc:creator>布衣?/author>Wed, 25 Apr 2007 08:33:00 GMThttp://www.aygfsteel.com/zyl/archive/2007/04/25/113562.htmlhttp://www.aygfsteel.com/zyl/comments/113562.htmlhttp://www.aygfsteel.com/zyl/archive/2007/04/25/113562.html#Feedback2http://www.aygfsteel.com/zyl/comments/commentRss/113562.htmlhttp://www.aygfsteel.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>   




]]>
了解jsf的架?一http://www.aygfsteel.com/zyl/archive/2007/04/21/112484.html布?/dc:creator>布?/author>Sat, 21 Apr 2007 12:06:00 GMThttp://www.aygfsteel.com/zyl/archive/2007/04/21/112484.htmlhttp://www.aygfsteel.com/zyl/comments/112484.htmlhttp://www.aygfsteel.com/zyl/archive/2007/04/21/112484.html#Feedback1http://www.aygfsteel.com/zyl/comments/commentRss/112484.htmlhttp://www.aygfsteel.com/zyl/services/trackbacks/112484.html    l过一D|间的学习Q对jsf的认识也逐渐清晰。ȝ了一下jsf和structs的区别,首先在于分离了请求的处理。用事件处理机制来代替原有的request分发。其ơ在面的展CZQ采用组件的概念Q而不是到处散落的html标记。再有,jsf对于h的生命周期重新进行了划分Q对于每个阶D都可以zN事gQ这使得整个h的处理比较的清晰。最后,jsf对于面的流转用Navigationpȝ来处理,q一Ҏ觉和structsq是比较cM的,只是换了一个概c?br>    从jsf的规范来看,jsf整个架构q是比较清晰Q各个层ơ分的也挺明显。从M上看Q规范主要划分了application,context,lifecycle,render,component,validator,event,el几个部分Q当然少不了主要的入口Servlet。有一点不太明白,大多数的c都是抽象类而不是接口,可能是ؓ了规定层ơ吧Q不允许多层ơѝ下面简单以下介l各个包的功能:
   application:从定义上可以看出来Q这是应用的。中间包括了ApplicationȝQ这是主要的E序入口Q规范中最h重量U的c,也是用来q接各个模块的。jsf规范使用工厂的模?来创建相应的实现c?当然如果需要Application的实玎ͼ需要从ApplicationFactory中取得。除了Applicationc,其中q包括了ViewHandlerQ这个主要负责View的Renderer调配工作。而许多jsf实现框架Q如果想定义自己的行为,一般上都会使用自n的ViewHandlerQ如facelets。NavigationHandler的工作,不用说已l很明显Q就是用来负责页面之间的D。包中,q包括了view状态管理类--StateManager,主要用于恢复viewQ以及保存view。目前一般用Session来保存相应的viewQ当然也可以使用客户端来保存。其实,对于view状态的保存Q非议还是挺多的Q而且问题也比较多?br>  contextQ包括了主要的上下文环境c,如FacesContext和ExternalContextQ前者是jsf的主要Contextc,包括对message的管理,Application的取得,以及ResponseWrite的引用。后者主要类g作ؓ外部环境的引用类Q如ServletContext和PortletContext.ResponseWriter,主要的服务端WriterQ用于输出相应的html,xml内容Q所有的Renderer都需要引用此c?br>  lifecycle:q是jsf最大的特色Q划分了h的相应的处理阶段。规范中Q只有两个类Lifecycle和LifecycleFactory。Lifecycle理整个jsfh的生命周期。通过指定的顺序执行相应的阶段?br>  webapp:定义了主要的ServletQFacesServletQ主要的h分发c,用于转换相应得faces为实际的资源。在规范中,Servletq不是主要的初始化类Qjsf 的初始化工作主要由具体的实现完成。在RI实现中,基本上由ConfigureListener完成初始化工作。而Servlet的Q务只是简单的传递请求参数而已Q以及调用相应的Lifecycle而已?br>  q里主要讲了jsf 的整体架构包Q下一主要分析一下jsf相关lg的包?br>
 
 





]]>
在eclipse中用jettyhttp://www.aygfsteel.com/zyl/archive/2007/04/12/jetty2.html布?/dc:creator>布?/author>Thu, 12 Apr 2007 05:42:00 GMThttp://www.aygfsteel.com/zyl/archive/2007/04/12/jetty2.htmlhttp://www.aygfsteel.com/zyl/comments/110159.htmlhttp://www.aygfsteel.com/zyl/archive/2007/04/12/jetty2.html#Feedback6http://www.aygfsteel.com/zyl/comments/commentRss/110159.htmlhttp://www.aygfsteel.com/zyl/services/trackbacks/110159.html 
    首先创徏一个web目Q我是采用maven 创徏的,用了mavenQ就喜欢上了Q而且正在享受其带来的方便。如下图的目录结构:



    在web-inf中可以不需要放|jar文gQ因Z是在eclipse中运行,自动会增加相应的classpath中的jar。只是需要把相应的jsp文g攄在webapp中?br>    接着增加相应的jetty.jarQ本来我是采用maven直接增加的,Z清晰的方式,采用手工增加。毕竟这些jarQ我是不需要的。如下图



    默认Q我使用jsp2.1规范Q如果需要jsp2.0Q可以只增加相应的jsp2.0文g中的jar?br>    接下来,配|run application。增加一个java application run.如下?br>


    记得勾上include libraries when...
    主要的main class:org.mortbay.xml.XmlConfiguration
    最后配|相应的参数Q?br>    program 参数为:etc/jetty-mywork-spring.xmlQ别忘了讄working directory为相应的jetty目录。如下图



    最后记得不要忘了在etc/jetty-mywork-spring.xmlQ增加相应的web 应用。如何增加,参见上篇文章Q?br>
    http://www.aygfsteel.com/zyl/archive/2007/04/09/jetty.html



]]>
վ֩ģ壺 | «| | | Ϫ| | ɽ| ײ| ֶ| | ӳ| Ǩ| Դ| | ˫| Ī| ض| | | ʼ| | Ů| | ֹ| | ϵ| | ϰˮ| | | | | | | ǧ| | | | ˳| | |