Tapestry的使用

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/libra_ts/article/details/78993472
<span jwcid="@Insert" value="ognl:t4start" />

        在上面的代码中,调用了Tapestry的官方组件Insert,value属性是Insert组件的参数之一。
    "@"符号用于区分jwcid是一个组件类型还是一个组件ID,如果是一个组件ID,tapestry将在HTML模板对应的页面规范中寻找对应该组件ID的组件调用配置。
    (亦可这样理解,"@"为官方组件,无"@"为自定义组件,自定义组件需要在“.page”文件中详细配置该组件的用法。)

A)Foreach组件: 
首先,我们接触到的第一Tapestry组件是Foreach组件。Foreach是一个循环组件,它遍历source参数,并在表现其内容前更新value参数。
这是Tapestry组件参数的至关重要特性:将一个属性与一个组件参数绑定,组件不仅读取被绑定的属性,而且更新属性。 
Foreach组件使用<span>标签,当其表现(render)时,并不直接生成任何HTML代码。它仅仅是将其包含的HTML标签和包含的组件重复表现。 

B)Insert组件: 
我们可以在HTML模板中看见大量的Insert组件。这个组件很简单,就是实现out.print()的功能。 
<span jwcid="@Insert" value="ognl:item.username"/> 
我们刚刚提到,在Foreach组件每次循环遍历list的时候,把对象赋予item,现在我们就是取出item对象(MagMessage)中的username字段的值。
这里我们使用了OGNL表达式。等同于:item.getUsername()。 
在组件规范中,我们可以看到Insert组件还有一个参数raw,该参数是boolean类型,其默认值为false。如果设为true,我们会看见,Insert组件会解析value参数的值中所包含的HTML标签。 

C)Image组件: 
<img jwcid="@Image" image="ognl:getAsset('image' item.head)" alt="头像" src="images/messageBoard/1.gif" width="32" height="32" border="0"/> 

Image组件是Tapestry标准组件,用于插入<img>标签,通过image参数生成标签src的属性。标签alt用来显示图片名称。
src参数在这里存在的原因是为了方便美工,这样在美工就可以在“所见即所得”编辑器中(如Dreamware)对页面进行编辑。
实际上该组件在运行时,会在page文件中寻找匹配image参数的图片路径动态替换src的路径。  
详细请看Tapestry.pdf 书籍  
D)Conditional组件 
该组件只有一个参数condition,如果condition参数的值为true,就运行Conditional组件的<span>标签范围内的HTML模板,相反则不运行。 
<span jwcid="@Conditional" condition='ognl:item.sex.equals("1")'> 先生 
</span> 
<span jwcid="@Conditional" condition='ognl:item.sex.equals("0")'> 女士 
</span> 
因为在数据库中,我们存储的性别类型为String类型的101代表“男”,0代表“女”,所以当我们取出item.sex字段的值后,需要把01转换为客户明白的词汇。  
E)GenericLink组件 
<a jwcid="@GenericLink" href="ognl:'http://' + item.homepage" disabled="ognl:item.homepage==null"><img src="images/messageBoard/home.gif" width="16" 

       var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);    


height="16" align="absmi0"/>主页</a>&nbsp;&nbsp; 
ddle" border="<a jwcid="@GenericLink" href="ognl:'mailto:' + item.email " disabled="ognl:item.email==null">
<img src="images/messageBoard/mail.gif" width="16" height="16" align="absmiddle" border="0"/>电子邮件</a> 

这个组件有个href参数,其作用很明显,就是提供一个链接地址,从item.homepage和item.email中可以取出地址,只是我们需要在“主页”的链接地址前添加'http://',在“电子邮件”前添加'mailto:'。 
Tapestry总共有6种标准的link组件:GenericLink, ActionLink, DirectLink,ServiceLink, ExternalLink和PageLink,在后续部分,我们会陆续介绍另外5种link组件。
组件GenericLink通常用于跳转到应用程序范围以外的链接。 
因为“主页”和“电子邮件”地址是用户在留言的时候自己填的,有可能有,也有可能没有。如果没有,就不应该“点击”,
所以GenericLink有个参数disabled,该参数默认为false,当为true时,不能被“点击”。关于disabled参数,所有link足见都有,作用均相同。  
F)Form组件基本用法: 
对于Form组件,也许现在阐述的内容让你一头雾水,不过看后面几种组件的介绍,就会逐渐明白的。 
<form jwcid="leaveWord@Form" delegate="ognl:beans.delegate"> 
表单提交必须使用DirectLink方式。在这里,监听(listener)方法可以有两种使用方式。

第一种方式,将监听方法放在Form组件中声明,那么格式就是: 
<form jwcid="leaveWord@Form" delegate="ognl:beans.delegate" listener="ognl:listeners.leaveWord"> 
这种方式的话,也就是说,凡是Form组件所包围的范围内,只要submitted,那么就会触发监听方法。 

第二种方式,将监听方法放在Submit或者ImageSubmit组件中: <span 
jwcid="@ImageSubmit" 
image="ognl:assets.submitImage" 
listener="ognl:listeners.leaveWord"><img src="images/button/tj.gif" width="50" height="18" border="0"/></span> 
也就是我们现在使用的方式,这种方式的优点在于,如果Form中有多个submit按钮,我们希望不同的按钮实现不同的功能,那么这种方式就方便多了。 
delegate="ognl:beans.delegate"这个参数用来连接Form和验证代理。在Form中的每一个FieldLabel和ValidField组件必须使用用一个验证代理。
在MessageBoard.page文件中: <bean name="delegate" class="com.cdmcs.tapestry.page.RegisterDelegate"/> OGNL表达式beans.delegate解释一个验证代理。所有这个Form中的组件都将共享这个代理。
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页