??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕在线观看亚洲日韩,亚洲综合另类小说色区,亚洲乱码一区av春药高潮http://www.tkk7.com/asdtiang/category/43550.html交流学习JAVA zh-cnTue, 12 Jan 2010 10:13:32 GMTTue, 12 Jan 2010 10:13:32 GMT60myeclipse6.5插gVeloeclipse的安?/title><link>http://www.tkk7.com/asdtiang/articles/309204.html</link><dc:creator>asdtiang</dc:creator><author>asdtiang</author><pubDate>Tue, 12 Jan 2010 10:02:00 GMT</pubDate><guid>http://www.tkk7.com/asdtiang/articles/309204.html</guid><wfw:comment>http://www.tkk7.com/asdtiang/comments/309204.html</wfw:comment><comments>http://www.tkk7.com/asdtiang/articles/309204.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/asdtiang/comments/commentRss/309204.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/asdtiang/services/trackbacks/309204.html</trackback:ping><description><![CDATA[<div class="7jl7pj9" id="blog_text" class="cnt"> <p><font color="#ff00ff">一。插件Veloeclipse 的安装:</font></p> <p><font color="#ff0000">声明Qmyeclipse版本Q?.5</font></p> <p>在Eclipse的Help->Software Updates->Find and Install..->Search for new features to installQ?/p> <p style="text-indent: 2em;">点击“new Remote Site...”Q增?VeloeclipseQ|<a ><font color="#ff0000">http://propsorter.sourceforge.net/veloeclipse</font></a>Q?/p> <p style="text-indent: 2em;">|上都说是这个链接,但是L报错Q?/p> <p style="text-indent: 2em;">“<font color="#ff0000"> Veloeclipse (2.0.6) requires plug-in "org.eclipse.equinox.p2.ui (1.0.1)", or compatible</font>.”</p> <p style="text-indent: 2em;">我英语很差,不太明白什么意思!哈哈Q?font color="#ff0000">希望? q篇文章且会p的hl留个言Q翻译下</font>Q?/p> <p style="text-indent: 2em;">|上的解释说Qveloeclipse插g和eclipse版本不兼宏V我L了大量的国外 |站Q有一个h说是Qveloeclipse插g的下载主|啦,需要新的链接地址Q?/p> <p style="text-indent: 2em;"><a rel="nofollow">http://veloeclipse.googlecode.com/svn/trunk/update/</a></p> <p style="text-indent: 2em;">于是url重新输入q个Q结果就正常啦!</p> <p style="text-indent: 2em;">然后选择VeloeclipseQnext后,会列出在|站上可以安装的featuresQ? 选择VeloeclipseQ版本是2.0.2Q?/p> <p style="text-indent: 2em;">剩下的就是根据提C往下安装即可完成,完成后提C需要重启eclipseQ选择重启?/p> <p><a target="_top" rel="nofollow"><font size="1">http://code.google.com/p/veloeclipse/</font></a></p> <p><font color="#ff00ff">二。插件Veloeclipse的用:</font></p> <p>插gVeloeclipseQVelocity+Html 的编辑工P除了提供不同颜色昄velocity和html的语法外Q还提供Ҏvelocity和html的tag自动寚wQtag和标{自动提示 {,真是开发社团里有什么需求,有什么开源的东东出来满Q这玩意值得一看,以挖掘看看有什么新鲜东ѝ?/p> <p>工具Ҏ:<br />     1Q用戯定义模版<br />     2Q根据velocity的vtl和html的标{进行自动羃q?br />     3Q语法高亮显C?br />     4Qhtml标签和velocity语句的自动完成提C和内容帮助Q?br />     5Qhtml预览<br />     6Q?ctrl+alt+鼠标点击 html的结束标{(如)或velocity的结束语句(?endQ,可以跌到对应开始的语句Q此外鼠标停留在l束标签上方Ӟ也会有提C指明该对应 的开始语句在哪一行?br />     7Q用Ctrl+alt+鼠标点击html标签Q?可打开对应的标{ָ助?br />      RemarkQ第6Q和7Q中的快h式在标准介绍中是用ctrl+鼠标点击Q但ctrl+鼠标点击已有其他应用占用了,试验发现需多加alt?/p> </div> <img src ="http://www.tkk7.com/asdtiang/aggbug/309204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/asdtiang/" target="_blank">asdtiang</a> 2010-01-12 18:02 <a href="http://www.tkk7.com/asdtiang/articles/309204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Velocity用户手册---中文?学习修改? ?/title><link>http://www.tkk7.com/asdtiang/articles/309202.html</link><dc:creator>asdtiang</dc:creator><author>asdtiang</author><pubDate>Tue, 12 Jan 2010 10:01:00 GMT</pubDate><guid>http://www.tkk7.com/asdtiang/articles/309202.html</guid><wfw:comment>http://www.tkk7.com/asdtiang/comments/309202.html</wfw:comment><comments>http://www.tkk7.com/asdtiang/articles/309202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/asdtiang/comments/commentRss/309202.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/asdtiang/services/trackbacks/309202.html</trackback:ping><description><![CDATA[Velocity的能力远不止web站点开发这个领域,例如Q它可以从模板(templateQ生SQL和PostScript、XMLQ它也可以被? 作一个独立工h产生源代码和报告Q或者作为其他系l的集成lg使用。Velocity也可以ؓTurbine web开发架构提供模板服务(template serviceQ。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型q行开发?<br /> <br /> Velocity能ؓ我们作什么? <br /> The Mud Store Example <br /> 假设你是一家专门出售Mud的在U商店的面设计人员Q让我们暂且U它?#8220;在线MUD商店”。你们的业务很旺Q客户下了各U类型和数量的mud订单。他? 都是通过输入用户名和密码后才登陆C的网站,登陆后就允许他们查看订单q购买更多的mud。现在,一U非常流行的mud正在打折销售。另外有一些客戯 律性的购买另外一U也在打折但是不是很行的Bright Red MudQ由于购买的人ƈ不多所以它被安|在面的边~。所有用L信息都是被跟tƈ存放于数据库中的Q所以某天有一个问题可能会冒出来:Z么不使用 velocity来用户更好的浏览他们感兴趣的商品呢Q?<br /> Velocity使得web面的客户化工作非常Ҏ。作Z个web site的设计h员,你希望每个用L陆时都拥有自q面?<br /> 你会见了一些公司内的Y件工E师Q你发现他们每个人都同意客户应该拥有h个性化的信息。那让我们把软g工程师应该作的事情发在一边,看一看你应该作些什 么吧?<br /> <br /> VTL意味着提供最单、最Ҏq且最整洁的方式合q面动态内宏V?<br /> VTL使用references来在web site内嵌套动态内容,一个变量就是一U类型的reference。变量是某种cd的refreenceQ它可以指向java代码中的定义Q或者从当前 面内定义的VTL statement得到倹{下面是一个VTL statement的例子,它可以被嵌套到HTML代码中: <br /> <div id="f91z9rb" class="dp-highlighter"> <div id="7jxd9l9" class="bar"> <div id="rz7lr7z" class="tools">Java代码 <a title="复制代码" _fcksavedurl="http://airport.javaeye.com/blog/23634#"><img alt="复制代码" src="http://airport.javaeye.com/images/icon_copy.gif" _fcksavedurl="http://airport.javaeye.com/images/icon_copy.gif" /></a></div> </div> <ol class="dp-j"> <li><span><span>#set ( $a = “Velocity” );  </span></span></li> </ol> </div> <pre class="java" style="display: none;" name="code">#set ( $a = “Velocity” );</pre> <br /> 和所有的VTL statement一Pq个statement以#字符开始ƈ且包含一个directiveQset。当一个在U用戯求你的页面时QVelocity Templating Engine查询整个页面以便发现所有#字符Q然后确定哪些是VTL statementQ哪些不需要VTL作Q何事情?<br /> Q字W后紧跟一个directiveQsetӞq个set directive使用一个表辑ּQ用括号封闭)――一个方E式分配一个值给变量。变量被列在左边Q而它的D列在双Q最后他们之间用=号分剌Ӏ?<br /> 在上面的例子中,变量?aQ而它的值是Velocity。和其他的references一样以$字符开始,而值L以双引号闭。Velocity中仅 有String可以被赋值给变量?<br /> C以下的规则: <br /> 使用$字符开始的references用于得到什么;使用#字符开始的directives用于作些什么?<br /> Hello Velocity World! <br /> 一旦某个变量被分配了一个|那么你就可以在HTML文g的Q何地方引用它。在下面的例子中Q一个D分配l?foo变量Qƈ在其后被引用?<br /> <html> <br /> <body> <br /> #set ( $foo = “Velocity” ) <br /> Hello $foo World! <br /> </body> <br /> </html> <br /> 上面的实现结果是在页面上打印“Hello Velocity WorldQ?#8221; <br /> Z使包含VTL directives的statement更具有可L,我们鼓励你在新行开始每个VTL statementQ尽你不是必须q么作。Set directive在后面详细描述?<br /> 注释 <br /> 单行注释Q?<br /> ## This is a single line comment. <br /> 多行注释Q?<br /> #* <br />    Thus begins a multi-line comment. Online visitors won’t <br />    see this text because the Velocity Templating Engine will <br /> ignore it. <br /> *# <br /> 文档格式Q?<br /> #** <br />    This is a VTL comment block and <br />    may be used to store such information <br /> as the document author and versioning <br />    information: <br />    @version 5 <br />    @author <br /> *# <br /> <br /> References <br /> 在VTL中有三种cd的referencesQ变?variables)、属?properties)、方?methods)。作Z个用VTL 的页面设计者,你和你的工程师必dreferences的名U达成共识,以便你可以在你的template中用它们?<br /> Everything coming to and from a reference被作Z个String对象处理。如果有一个对?foo是一个Integer对象Q那么Velocity调用它? toString()Ҏ这个对象{型ؓStringcd?<br /> 变量 <br /> 格式要求同java?<br /> 属?<br /> 例子Q?<br />     $customer.Address <br />     $purchase.Total <br /> $customer.Address有两U含义。它可以表示Q查找hashtable对象customer中以Address为关键字的|也可以表C 用customer对象的getAddress()Ҏ。当你的面被请求时QVelocity确定以上两U方式选用那种Q然后返回适当的倹{?<br /> Ҏ <br /> 一个方法就是被定义在java中的一D代码,q且它有完成某些有用工作的能力,例如一个执行计和判断条g是否成立、满等。方法是一个由$开始ƈ跟随 VTL标识W组成的ReferencesQ一般还包括一个VTLҎ体。例如: <br /> $customer.getAddress() <br /> $purchase.getTotal() <br /> $page.setTitle( “My Home Page” ) <br /> $person.setAttributes( [“Strange”, “Weird”, “Excited”] ) <br /> 前两个例?customer.getAddress()?purchase.getTotal()看v来挺想上面的? ?customer.Address ?$purchase.Total。如果你觉得他们之间有某U联pȝ话,那你是正的?<br /> VTL属性可以作为VTLҎ的羃写?customer.Address属性和使用$customer.getAddress()Ҏh相同的效果? 如果可能的话使用属性的方式是比较合理的。属性和Ҏ的不同点在于你能够给一个方法指定一个参数列表?<br /> 正式reference标记 <br /> reference的正是格式如下: <br /> ${mudSlinger}        变量 <br /> ${customer.Address}    属?<br /> ${purchase.getTotal()}    Ҏ <br /> 非正是格式更见常用,但是有时q是使用正是格式比较适合。例如:你希望通过一个变?vice来动态的l织一个字W串?<br /> Jack is a $vicemaniac. <br /> 本来变量?vice现在却变成了$vicemaniacQ这样Veloctiy׃知道您到底要什么了。所以,应该使用正是格式书写 <br /> Jack is a ${vice}maniac <br /> 现在Velocity知道变量?vice而不?vicemaniac?<br /> Quiet reference notation <br /> 例如Q?<br /> <input type=”text” name=”email” value=”$email” /> <br /> 当页面的form被初始加载时Q变?emailq没有|q时你肯定是希望它能够显CZ个blank text来代替输?#8221;$email”q样的字Dc那么用quiet reference notation比较合适?<br /> <input type=”text” name=”email” value=”$!email”/> <br /> q样文本框的初始值就不会是email而是Ig?<br /> 正式和quiet格式的reference notation也可一同用,像下面这P <br /> <input type=”text” name=”email” value=”$!{email}”/> <br /> Getting literal <br /> Velocity使用Ҏ字符$?来帮助它工作Q所以如果要在template里用这些特D字W要格外心。本节将讨论$字符?<br /> 货币字符 <br /> 在VTL中?2.5q样的货币标识是没有问题得的QVTL不会它错认为是一个referenceQ因为VTL中的referenceL以一个大? 或者小写的字母开始?<br /> Escaping valid VTL reference <br /> VTL中?#8220;\”作ؓ逃逸符?<br /> 例如Q?<br /> #set( $email = “foo” ) <br /> $email <br /> \$email <br /> \\$email <br /> \\\$email <br /> render为: <br /> foo <br /> $email <br /> \foo <br /> \\$email <br /> 如果email变量没有被定义则 <br /> $email <br /> \$email <br /> \\$email <br /> \\\$email <br /> 被render为: <br /> $email <br /> \$email <br /> \\$email <br /> \\\$email <br /> 注意QVTL中未被定义的变量被认ؓ是一个字W串Q所以以下例子: <br /> #set( $foo = “gibbous” ) <br /> $moon = $foo <br /> 的输出结果是Q?<br /> $moon = gibbous <br /> Case substitution <br /> 现在你已l对reference比较熟悉了,你可以将他们高效的应用于你的template了。Velocity利用了很多java规范以方便了设计人员 的用。例如: <br /> $foo <br /> $foo.getBar() <br /> ## is the same as <br /> $foo.Bar <br /> <br /> $data.getUser(“jon”) <br /> ## is the same as <br /> $data.User(“jon”) <br /> <br /> $data.getRequest().getServerName() <br /> # is the same as <br /> $data.Request.ServerName <br /> ## is the same as <br /> ${data.Request.ServerName} <br /> 但是Q注意VTL中不会将reference解释为对象的实例变量。例如:$foo.Name被解释为Foo对象的getNameQ)ҎQ而不? Foo对象的Name实例变量?<br /> Directives <br /> Reference允许设计者用动态的内容Q而directive使得你可以应用java代码来控制你的显C逻辑Q从而达C所期望的显C效果?<br /> #set <br /> #set directive被用于设|一个reference的倹{例如: <br />     #set ( $primate = “monkey” ) <br />     #set ( $customer.Behavior = $primate ) <br /> 赋值左侧的QLHSQ必L一个变量或者属性reference。右侧(RHSQ可以是以下cd中一U: <br /> l 变量reference <br /> l String literal <br /> l 属性reference <br /> l Ҏreference <br /> l number literal <br /> l ArrayList <br /> 下面是应用各U类型的RHS的例子: <br /> Qset ( $monkey = $bill ) ##变量reference <br /> Qset ( $monkey.Friend = “monica” ) ##String literal <br /> Qset ( $monkey.Blame = $whitehouse.Leak )##属性reference <br /> Qset ( $monkey.Plan = $spindoctor.weave($web) )##Ҏreference <br /> Qset ( $monkey.Number = 123 )##Number literal <br /> Qset ( $monkey.Say = [“Not”, $my, “fault”] )##ArrayList <br /> 注意Q最后一个例子的取值方法ؓQ?monkey.Say.get(0) <br /> RHS也可以是一个简单的术表达式: <br /> #set ( $value = $foo + 1 ) <br /> #set ( $value = $bar -1 ) <br /> #set ( $value = $foo * $bar ) <br /> #set ( $value = $foo / $bar ) <br /> 如果你的RHS是一个nullQVTL的处理将比较ҎQ它指向一个已l存在的referenceQ这对初学者来讲可能是比较费解的。例如: <br /> #set ( $resut = $query.criteria(“name”) ) <br /> The result of the first query is $result <br /> <br /> #set ( $resut = $query.criteria(“address”) ) <br /> The result of the second query is $result <br /> 如果$query.criteria(“name”)q回一?#8220;bill”Q?query.criteria(“address”)q回的是nullQ? 则显C的l果如下Q?<br /> The result of the first query is bill <br /> The result of the first query is bill <br /> 看看下面的例子: <br /> #set( $criteria = ["name", "address"] ) <br /> #foreach( $criterion in $criteria ) <br /> #set( $result = $query.criteria($criterion) ) <br /> #if( $result ) <br /> Query was successful <br />      #end <br /> #end <br /> 在上面的例子中,E序不能智能的Ҏ$result的值决定查询是否成功。在$result?set后(added to the contextQ,它不能被讄回nullQremoved from the contextQ。打印的l果显CZơ查询结果都成功了,但是实际上有一个查询是p|的?<br /> Z解决以上问题我们可以通过预先定义的方式: <br /> #set( $criteria = [“name”, “address”] ) <br /> #foreach( $criterion in $criteria ) <br />     #set( $result = false ) <br />     #set( $result = $query.criteria( $criterion ) ) <br />     #if( $result ) <br />       Query was successful <br />     #end <br /> #end <br /> String Literals <br /> 当你使用#set directiveQString literal闭在一对双引号内?<br />     #set ( $directoryRoot = “www” ) <br />     #set ( $templateName = “index.vm” ) <br />     #set ( $template = “$directoryRoot/$tempateName” ) <br />     $template <br /> 上面q段代码的输出结果ؓQwww/index.vm <br /> 但是Q当string literal被封装在单引号内Ӟ它将不被解析Q?<br />     #set ( $foo = “bar” ) <br />     $foo <br />     #set ( $blargh = ‘$foo’ ) <br /> l果Q?<br />     bar <br />     $foo <br /> 上面q个Ҏ可以通过修改velocity.properties文g的stringliterals.interpolate = false的值来改变上面的特性是否有效?<br /> 条g语句 <br /> if/elseif/else <br /> 当一个web面被生成时使用Velocity?if directriveQ如果条件成立的话可以在面内嵌入文字。例如: <br /> #if ( $foo ) <br />     <strong>Velocity!</strong> <br /> #end <br /> 上例中的条g语句在以下两种条g下成立: <br /> l $foo是一个boolean型的变量Q且它的gؓtrue <br /> l $foo变量的g为null <br /> q里需要注意一点:Velocity context仅仅能够包含对象Q所以当我们?#8220;boolean”时实际上代表的时一个Boolean对象。即便某个方法返回的是一个boolean |Velocity也会利用内省机制它转换Z个Boolean的相同倹{?<br /> 如果条g成立Q那?if?end之间的内容将被显C?<br /> #elseif?else元素可以?if一同用。例如: <br /> #if( $foo < 10 ) <br />     <strong> Go North </strong> <br /> #elseif( $foo == 10 ) <br />     <strong> Go East </strong> <br /> #elseif( $foo == 6 ) <br />     <strong> Go South </strong> <br /> #else <br />     <strong> Go West </strong> <br /> #end <br /> 注意q里的Velocity的数字是作ؓInteger来比较的――其他类型的对象得条件ؓfalseQ但是与java不同它?#8220;Q=”来比较两? |而且velocity要求{号两边的值类型相同?<br /> 关系、逻辑q算W?<br /> Velocity中用等h作符判断两个变量的关pR例如: <br /> #set ( $foo = “deoxyribonucleic acid” ) <br /> #set ( $bar = “ribonucleic acid” ) <br /> #if ( $foo == $foo ) <br /> In this case it’s clear they aren’t equivalent.So… <br /> #else <br /> They are not equivalent and this will be the output. <br /> #end <br /> <br /> Velocity有AND、OR和NOT逻辑q算W。下面是一些例子: <br /> ## logical AND <br /> #if( $foo && $bar ) <br />     <strong> This AND that </strong> <br /> #end <br /> <br /> ## logical OR <br /> #if ( $foo || $bar ) <br />     <strong>This OR That </strong> <br /> #end <br /> <br /> ##logical NOT <br /> #if ( !$foo ) <br />     <strong> NOT that </strong> <br /> #end <br /> 循环 <br /> Foreach循环 <br /> 例子Q?<br />     <ul> <br />       #foreach ( $product in $allProducts ) <br />         <li> $product </li> <br />       #end <br />     </ul> <br /> 每次循环$allProducts中的一个值都会赋l?product变量?<br /> $allProducts可以是一个Vector、Hashtable或者Array。分配给$product的值是一个java对象Qƈ且可以通过变量 被引用。例如:如果$product是一个java的Productc,q且q个产品的名字可以通过调用他的getNameQ)Ҏ得到?<br /> 现在我们假设$allProducts是一个HashtableQ如果你希望得到它的key应该像下面这P <br /> <ul> <br /> #foreach ( $key in $allProducts.keySet() ) <br /> <li>Key: $key -> Value: $allProducts.get($key) </li> <br /> #end <br /> </ul> <br /> <br /> Velocityq特别提供了得到循环ơ数的方法,以便你可以像下面q样作: <br /> <table> <br /> #foreach ( $customer in $customerList ) <br /> <tr><td>$velocityCount</td><td>$customer.Name</td></tr> <br /> #end <br /> </table> <br /> $velocityCount变量的名字是Velocity默认的名字,你也可以通过修改velocity.properties文g来改变它。默认情? 下,计数?#8220;1”开始,但是你可以在velocity.properties讄它是?#8220;1”q是?#8220;0”开始。下面就是文件中的配|: <br /> # Default name of loop counter <br /> # variable reference <br /> directive.foreach.counter.name = velocityCount <br /> <br /> # Default starting value of the loop <br /> # counter variable reference <br /> directive.foreach.counter.initial.value = 1 <br /> <br /> include <br /> #include script element允许模板设计者引入本地文件。被引入文g的内容将不会通过模板引擎被render。ؓ了安全的原因Q被引入的本地文件只能在 TEMPLATE_ROOT目录下?<br /> #inclued ( “one.txt” ) <br /> 如果您需要引入多个文Ӟ可以用逗号分隔pQ?<br /> #include ( “one.gif”, “two.txt”, “three.htm” ) <br /> 在括号内可以是文件名Q但是更多的时候是使用变量的: <br /> #inclue ( “greetings.txt”, $seasonalstock ) <br /> <br /> parse <br /> #parse script element允许模板设计者一个包含VTL的本地文件。Velocity解析其中的VTLqrender模板?<br /> #parse( “me.vm” ) <br /> 像#includeQ?parse接受一个变量而不是一个模ѝQ何由#parse指向的模杉K必须包含在TEMPLATE_ROOT目录下? ?include不同的是Q?parse只能指定单个对象?<br /> 你可以通过修改velocity.properties文g的parse_direcive.maxdepth的值来控制一个template可以包含? 最?parse的个数――默认值是10?parse是可以递归调用的,例如Q如果dofoo.vm包含如下行: <br /> Count down. <br /> #set ( $count = 8 ) <br /> #parse ( “parsefoo.vm” ) <br /> All done with dofoo.vm! <br /> 那么在parsefoo.vm模板中,你可以包含如下VTLQ?<br /> $count <br /> #set ( $count = $count – 1 ) <br /> #if ( $count > 0 ) <br />     #parse( “parsefoo.vm” ) <br /> #else <br />     All done with parsefoo.vm! <br /> #end <br /> 的显C结果ؓQ?<br /> Count down. <br /> 8 <br /> 7 <br /> 6 <br /> 5 <br /> 4 <br /> 3 <br /> 2 <br /> 1 <br /> 0 <br /> All done with parsefoo.vm! <br /> All done with dofoo.vm! <br /> <br /> Stop <br /> #stop script element允许模板设计者停止执行模板引擎ƈq回。把它应用于debug是很有帮助的?<br /> #stop <br /> <br /> Velocimacros <br /> #macro script element允许模板设计者定义一D可重用的VTL template。例如: <br /> #macro ( d ) <br /> <tr><td></td></tr> <br /> #end <br /> 在上面的例子中Velocimacro被定义ؓdQ然后你可以在MVTL directive中以如下方式调用它: <br /> #d() <br /> 当你的template被调用时QVelocity用<tr><td></td></tr>替换 ?d()?<br /> 每个Velocimacro可以拥有L数量的参数――甚?个参敎ͼ虽然定义时可以随意设|参数数量,但是调用q个Velocimacro时必L定正 的参数。下面是一个拥有两个参数的VelocimacroQ一个参数是color另一个参数是arrayQ?<br /> #macro ( tablerows $color $somelist ) <br /> #foreach ( $something in $somelist ) <br />     <tr><td bgcolor=$color>$something</td</tr> <br /> #end <br /> #end <br /> 调用#tablerows VelocimacroQ?<br /> #set ( $greatlakes = [ “Superior”, “Michigan”, “Huron”, “Erie”, “Ontario” ] ) <br /> #set ( $color = “blue” ) <br /> <table> <br />     #tablerows( $color $greatlakes ) <br /> </table> <br /> l过以上的调用将产生如下的显C结果: <br /> <table> <br />     <tr><td bgcolor=” blue”> Superior </td></tr> <br />     <tr><td bgcolor=” blue”> Michigan </td></tr> <br />     <tr><td bgcolor=” blue”> Huron </td></tr> <br />     <tr><td bgcolor=” blue”> Erie </td></tr> <br />     <tr><td bgcolor=” blue”> Ontario </td></tr> <br /> </table> <br /> Velocimacros可以在Velocity模板内实现行内定义(inlineQ,也就意味着同一个web site内的其他Velocity模板不可以获得Velocimacros的定义。定义一个可以被所有模板共享的Velocimacro昄是有很多好处 的:它减了在一大堆模板中重复定义的数量、节省了工作旉、减了出错的几率、保证了单点修改?<br /> 上面定义?tablerows( $color $list )Velocimacro被定义在一个Velocimacros模板?在velocity.properties中定?里,所以这个macro可以? M规范的模板中被调用。它可以被多ơ应用ƈ且可以应用于不同的目的。例如下面的调用Q?<br /> #set ( $parts = [ “volva”, “stipe”, “annulus”, “gills”, “pileus” ] ) <br /> #set ( $cellbgcol = “#CC00FF” ) <br /> <table> <br />     #tablerows( $cellbgcol $parts ) <br /> </table> <br /> 上面VTL生如下的输出Q?<br /> <table> <br />     <tr><td bgcolor=”#CC00FF”> volva </td</tr> <br />     <tr><td bgcolor=”#CC00FF”> stipe </td</tr> <br />     <tr><td bgcolor=”#CC00FF”> annulus </td</tr> <br />     <tr><td bgcolor=”#CC00FF”> gills </td</tr> <br />     <tr><td bgcolor=”#CC00FF”> pileus </td</tr> <br /> </table> <br /> Velocimacro arguments <br /> Velocimacro可以使用以下M元素作ؓ参数Q?<br /> l ReferenceQQ何以$开头的reference <br /> l String literalQ?<br /> l Number literalQ?<br /> l IntegerRangeQ[1….3]或者[$foo….$bar] <br /> l 对象数组Q[“a”,”b”,”c”] <br /> l boolean|true、false <br /> 当将一个reference作ؓ参数传递给VelocimacroӞh意reference作ؓ参数时是以名字的形式传递的。这意味着参数的值在? ơVelocimacro内执行时才会被生。这个特性得你可以一个方法调用作为参C递给VelocimacroQ而每ơVelocimacro? 行时都是通过q个Ҏ调用产生不同的值来执行的。例如: <br /> #macro ( callme $a ) <br />     $a $a $a <br /> #end <br /> #callme( $foo.bar() ) <br /> 执行的结果是Qreference $foo的barQ)Ҏ被执行了三次?<br /> 如果你不需要这LҎ可以通过以下ҎQ?<br /> #set ( $myval = $foo.bar() ) <br /> #callme ( $myval ) <br /> <br /> Velocimacro properties <br /> Velocity.properties文g中的某几行能够Velocimacros的实现更加灵zR注意更多的内容可以看Developer Guide?<br /> Velocity.properties文g中的velocimacro.libraaryQ一个以逗号分隔的模板库列表。默认情况下Qvelocity 查找唯一的一个库QVM_global_library.vm。你可以通过配置q个属性来指定自己的模板库?<br /> Velocity.properties文g中的velocimacro.permissions.allow.inline属性:有两个可选的? true或者falseQ通过它可以确定Velocimacros是否可以被定义在regular template内。默认值是ture――允许设计者在他们自己的模板中定义Velocimacros?<br /> Velocity.properties文g中的 <br /> velocimacro.permissions.allow.inline.replace.global属性有两个可选值true和falseQ这? 属性允怋用者确定inline的Velocimacro定义是否可以替代全局Velocimacro定义Q比如在 velocimacro.library属性中指定的文件内定义的VelocimacroQ。默认情况下Q此gؓfalse。这样就L本地 Velocimacro定义覆盖全局定义?<br /> Velocity.properties文g中的 <br /> velocimacro.permissions.allow.inline.local.scale属性也是有true和false两个可选|默认? false。它的作用是用于定你inline定义的Velocimacros是否仅仅在被定义的template内可见。换句话_如果q个属性设|ؓ trueQ一个inline定义的Velocimacros只能在定义它的template内用。你可以使用此设|实C个奇妙的VM敲门Qa template can define a private implementation of the second VM that will be called by the first VM when invoked by that template. All other templates are unaffected?<br /> Velocity.properties文g中的velocimacro.context.localscope属性有true和false两个可选| 默认gؓfalse。当讄为trueӞM在Velocimacro内通过#set()对context的修改被认ؓ是针Ҏvelocimacro 的本地设|,而不会永久的影响内容?<br /> Velocity.properties文g中的velocimacro.library.autoreload属性控制Velocimacro库的自动 加蝲。默认是false。当讄为tureӞ对于一个Velocimacro的调用将自动查原始库是否发生了变化,如果变化重新加载它。这个属性 得你可以不用重新启动servlet容器而达到重新加载的效果Q就像你使用regular模板一栗这个属性可以用的前提是resource loader~存是off状态(file.resource.loader.cache = falseQ。注意这个属性实际上是针对开发而非产品的?<br /> Velocimacro Trivia <br /> Velocimacro必须被定义在他们被用之前。也是_你的#macro()声明应该出现在用Velocimacros之前?<br /> 特别要注意的是,如果你试?parse()一个包?macro()的模ѝ因?parse()发生在运行期Q但是解析器在parsetiem军_一 个看似VM元素的元素是否是一个VM元素Q这?parse()-ing一lVM声明不按照预期的样子工作。ؓ了得到预期的l果Q只需要你单的使用 velocimacro.library使得Velocity在启动时加蝲你的VMs?<br /> Escaping VTL directives <br /> VTL directives can be escaped with “\”P使用方式跟VTL的reference使用逃逸符的格式差不多?<br /> ## #include( “a.txt” ) renders as <ontents of a.txt>(注释? <br /> #include( “a.txt” ) <br /> <br /> ## \#include( “a.txt” ) renders as \#include( “a.txt” ) <br /> \#include( “a.txt” ) <br /> <br /> ## \\#include ( “a.txt” ) renders as \<contents of a.txt> <br /> \\#include( “a.txt” ) <br /> 在对在一个directive内包含多个script元素的VTL directives使用逃逸符时要特别心Q比如在一个if-else-end statement内)。下面是VTL的if-statement的典型应用: <br /> #if ( $jazz ) <br />     Vyacheslav Ganelin <br /> #end <br /> 如果$jazz是tureQ输出将是: <br /> Vyacheslav Ganelin <br /> 如果$jazz是falseQ将没有输出。用逃逸符改变输出。考虑一下下面的情况Q?<br /> \#if ( $jazz ) <br />     Vyacheslav Ganelin <br /> \#end <br /> 现在无论$jazz是trueq是falseQ输出结果都是: <br /> #if ( $jazz ) <br />     Vyacheslav Ganelin <br /> #end <br /> 事实上,׃你用了逃逸符Q?jazzҎ没有被解析为boolean型倹{在逃逸符前用逃逸符是合法的Q例如: <br /> \\#if ( $jazz ) <br />     Vyacheslav Ganelin <br /> \\#end <br /> 以上E序的显C结果ؓQ?<br /> \ Vyacheslav Ganelin <br /> \ <br /> 但是如果$jazz为falseQ那么将没有输出。(书上说会没有输出Q但是我觉得应该q有?#8220;\”字符被输出。) <br /> VTLQFormatting issues <br /> 管在此用户手册中VTL通常都开始一个新行,如下所C: <br /> #set ( $imperial = [ “Munetaka”, “Koreyasu”, “Hisakira”, “Morikune” ] ) <br /> #foreach ( $shogun in $imperial ) <br />     $shogun <br /> #end <br /> 但是像下面这U写法也是可以的Q?<br /> Send me #set($foo = [“$10 and”,”a cake”])#foreach($a in $foo)$a #end please. <br /> 上面的代码可以被改写为: <br /> Send me <br /> #set ( $foo = [“$10 and “,”a cake”] ) <br /> #foreach ( $a in $foo ) <br />     $a <br /> #end <br /> please. <br /> 或?<br /> Send me <br /> #set($foo = [“$10 and “,”a cake”]) <br />         #foreach Q?a in $foo Q?a <br />       #end please. <br /> q两U的输出l构一栗?<br /> 其他Ҏ和杂项 <br /> math   在模板中可以使用Velocity内徏的算术函敎ͼ如:加、减、乘、除 <br />     #set ( $foo = $bar + 3 ) <br />     #set ( $foo = $bar - 4 ) <br />     #set ( $foo = $bar * 6 ) <br />     #set ( $foo = $bar / 2 ) <br /> 当执行除法时返回一个Integercd的结果。而余C可以使用%来得刎ͼ <br />     #set ( $foo = $bar % 5 ) <br /> 在Velocity内用数学计公式时Q只能用像-n,-2,-1,0,1,2,nq样的整敎ͼ而不能用其它类型数据。当一个非整型的对象被使用? 它将被loggedq且以null作ؓ输出l果?<br /> Range Operator <br /> Range operator可以被用于与#set?foreach statement联合使用。对于处理一个整型数l它是很有用的,Range operatorh以下构造Ş式: <br /> [n..m] <br /> m和n都必L整型Q而m是否大于n则无关紧要。例子: <br /> First example: <br /> #foreach ( $foo in [1..5] ) <br />     $foo <br /> #end <br /> <br /> Second example: <br /> #foreach ( $bar in [2..-2] ) <br />     $bar <br /> #end <br /> <br /> Third example: <br /> #set ( $arr = [0..1] ) <br /> #foreach ( $i in $arr ) <br />     $i <br /> #end <br /> <br /> Fourth example: <br /> [1..3] <br /> 上面四个例子的输出结果ؓQ?<br /> First exampleQ?<br /> 1 2 3 4 5 <br /> <br /> Second exampleQ?<br /> 2 1 0 -1 -2 <br /> <br /> Third exampleQ?<br /> 0 1 <br /> <br /> Fourth exampleQ?<br /> [1..3] <br /> 注意Qrange operator只在#set?foreach中有效?<br /> Advanced IssueQEscaping andQ?<br /> 当一个reference?#8220;Q?#8221;分隔Ӟq且在它之前有逃逸符Ӟreference以Ҏ的方式处理。注意这U方式与标准的逃逸方式时不同的。对? 如下Q?<br /> #set ( $foo = “bar” ) <br /> Ҏ形式 标准格式 <br /> Render? Render? Render? Render?<br /> $\!foo $!foo \$foo \$foo <br /> $\!{foo} $!{foo} \$!foo \$!foo <br /> $\\!foo $\!foo \$!{foo} \$!{foo} <br /> $\\\!foo $\\!foo \\$!{foo} \bar <br /> Velocimacro杂记 <br /> Can I user a directive or another VM as an argument to a VM? <br /> 例如Q?center ( #bold( “hello” ) ) <br /> 不可以。一个directive的参C用另外一个directive是不合法的?<br /> 但是Q还是有些事情你可以作的。最单的方式是使用双引P <br />     #set ( $stuff = “#bold( ‘hello’ )” ) <br />     #center ( $stuff ) <br /> 上面的格式也可以~写Z行: <br />     #center ( “#bold( ‘hello’ ) ) <br /> h意在下面的例子中参数被evaluated在Velocimacro内部Q而不是在calling level。例子: <br /> #macro ( inner $foo ) <br />     inner : $foo <br /> #end <br /> <br /> #macro ( outer $foo ) <br />     #set ( $bar = “outerlala” ) <br />     outer : $foo <br /> #end <br /> <br /> #set ( $bar = ‘calltimelala’ ) <br /> #outer( “#inner($bar)” ) <br /> 输出l果为: <br /> outer : inner : outerlala <br /> CVeloctiy的特性:参数的传递是By Name的。例如: <br /> #macro ( foo $color ) <br />     <tr bgcolor = $color ><td>Hi</td></tr> <br />     <tr bgcolor = $color ><td>There</td></tr> <br /> #end <br /> <br /> #foo ( $bar.rowColor() ) <br /> 以上代码导致rowColor()Ҏ两次调用Q而不是一ơ。ؓ了避免这U现象的出现Q我们可以按照下面的方式执行Q?<br /> #set ( $color = $bar.rowColor() ) <br /> #foo ( $color ) <br /> can I register velocimacros via #parse()? <br /> 目前QVelocimacros必须在第一ơ被模板调用前被定义。这意味着你的#macro()声明应该出现在用Velocimacros之前?<br /> 如果你试?parse()一个包?macro() directive的模板,q一Ҏ需要牢记的。因?parse()发生在运行期Q但是解析器在parsetiem军_一个看似VM元素的元素是否是一 个VM元素Q这?parse()-ing一lVM声明不按照预期的样子工作。ؓ了得到预期的l果Q只需要你单的使用 velocimacro.library使得Velocity在启动时加蝲你的VMs?<br /> What is velocimacro autoreloadingQ?<br /> velocimacro.library.autoreload是专门ؓ开发而非产品使用的一个属性。此属性的默认值是false?<br /> String concatenation <br /> 开发h员最帔R的问题是我如何作字符拼接Q在java中是使用“Q?#8221;h完成的?<br /> 在VTL里要惛_现同L功能你只需要将需要联合的reference攑ֈ一起就行了。例如: <br /> #set ( $size = “Big” ) <br /> #set ( $name = “Ben” ) <br /> The clock is $size$name. <br /> 输出l果是QThe clock is BigBen.。更有趣的情冉|Q?<br /> #set ( $size = “Big” ) <br /> #set ( $name = “Ben” ) <br /> #set ( $clokc = “$size$name” ) <br /> The clock is $clock. <br /> 上例也会得到同样的结果。最后一个例子,当你希望混合固定字段C的referenceӞ你需要用标准格式: <br /> #set ( $size = “Big” ) <br /> #set ( $name = “Ben” ) <br /> #set ( $clock = “${size}Tall$name” ) <br /> The clock is $clock. <br /> 输出l果是:The clock is BigTallBen.。用这U格式主要是Z使得$size不被解释?sizeTall?<br /> <img src ="http://www.tkk7.com/asdtiang/aggbug/309202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/asdtiang/" target="_blank">asdtiang</a> 2010-01-12 18:01 <a href="http://www.tkk7.com/asdtiang/articles/309202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://vastraje.com" target="_blank">Ļ</a>| <a href="http://www91v.com" target="_blank">ۺŷɫ°Ҳȥ</a>| <a href="http://cfxzp.com" target="_blank">þŷ޹ۺ</a>| <a href="http://bdykdq.com" target="_blank">ۺݾ</a>| <a href="http://jundaflex.com" target="_blank">޳</a>| <a href="http://8b22.com" target="_blank">þˮav뾫Ʒ鶹</a>| <a href="http://by9277.com" target="_blank">޾ƷӰҹ</a>| <a href="http://0888qb.com" target="_blank">Ʒ</a>| <a href="http://601508.com" target="_blank">þѹۿƵ</a>| <a href="http://16lds.com" target="_blank">Ʒ㽶߹ۿ</a>| <a href="http://c7372.com" target="_blank">޾ƷƬ߹ۿ</a>| <a href="http://sitefmns.com" target="_blank">޾ƷŮþþþ</a>| <a href="http://www-070755.com" target="_blank">þ99ۺϾƷ</a>| <a href="http://519vip.com" target="_blank">޹ŮƵ</a>| <a href="http://tianmao920.com" target="_blank">baoyu777Ƶ</a>| <a href="http://477077.com" target="_blank">ŮƵ</a>| <a href="http://www-8812.com" target="_blank">һƷ</a>| <a href="http://xsdjiagu.com" target="_blank">ݺɫۺվɫ</a>| <a href="http://jiezinet.com" target="_blank">Ƶ</a>| <a href="http://kmyake.com" target="_blank">޳av</a>| <a href="http://xdxdl.com" target="_blank">123Һ</a>| <a href="http://ynkaishan.com" target="_blank">69Ƶ߹ۿ</a>| <a href="http://changfafangzhi.com" target="_blank">Ƭ߹ۿ</a>| <a href="http://zhhy68.com" target="_blank">ԶƵ߹ۿѲ </a>| <a href="http://www-bajie.com" target="_blank">һĹ˾</a>| <a href="http://jmzc888.com" target="_blank">ۺŷۺվ</a>| <a href="http://kaixininvestment.com" target="_blank">زѿ</a>| <a href="http://fl6fe.com" target="_blank">þۺϾžһ</a>| <a href="http://znboxcdn304.com" target="_blank">hƵ߹ۿ</a>| <a href="http://dazngt.com" target="_blank">߹ѹۿ</a>| <a href="http://wuaiav.com" target="_blank">վƵ߹ۿ</a>| <a href="http://singbomb.com" target="_blank">ĻƵ</a>| <a href="http://cn-zggx.com" target="_blank">ĻӰwwwĻ</a>| <a href="http://ccc16938.com" target="_blank">˵Ӱ</a>| <a href="http://sznsfe.com" target="_blank">þþþAVר</a>| <a href="http://whdysdt.com" target="_blank">ƷһI6</a>| <a href="http://zhaosaohuo.com" target="_blank">þ˽˹Ʒ</a>| <a href="http://yy6636.com" target="_blank">Ʒ_Ʒ </a>| <a href="http://www66913.com" target="_blank">޹˾þþƷӰ</a>| <a href="http://quxx28.com" target="_blank">99鶹þþùƷ</a>| <a href="http://5tww.com" target="_blank">ҹӰ߹ۿ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>