WEB开发模式Tapestry简介 - 编程入门网
,或许可以直接地指定要插入文本的内容为“Jack”,但对一个实际的应用来说,往往是要从数据库从取出用户的名称,然后将该名称插入到HTML模板中去,那么就不能直接指定文本的内容了,怎么办呢?我们马上想到的办法是:指定一个JAVA类,通过javaBean的属性方法来获得数据库中的用户名,就像jsp中的<jsp getProperty … />标签一样,不错,这的确是一个好方法,tapestry正是这样做的,因此<binding name="value" expression="userName"/>这个元素中的expression的值正是demo.Home这个JAVA类的一个属性,也就是说将demo.Home这个类的userName属性绑定到Insert组件的value属性中去,而我们的创始人Howard Lewis Ship先生并没有重头对这个绑定的功能进行设计,因为在软件开发中有一句著名的话:”不要重复地发明同一个轮子“,这个绑定功能是由另一个开放源码的工具完成地---- Object Graph Navigation Library,简称OGNL(关于OGNL具体可以参考http://www.ognl.org )。其内部真正的转换如下图所示:
WEB开发模式Tapestry简介(4)时间:2010-12-10其中,Insert这个JWC组件有一个名为value的属性,而我们在Home.page中将它与一个外部对像userName进行绑定,在程序真正运行的时候,HTML模板中的user组件读取demo.Home这个JAVA类的userName属性,然后通过OGNL工具对Insert组件的value属性进行更新,最后user组件将更新后的值插入到模板当中。好了,这时候你应该明白了Insert组件是怎样取值的吧。 需要强调的是Page组件是一种特殊的JWC组件,它可以包含其它的JWC组件,但不能被其它的JWC组件所包含。除此之外,Page组件还有一些特殊的属性和功能,它也不能和其它组件进行组合而生成新的组件。 组件的命名方式和HTML模板的命名方式有些不同,它可以以.page作为扩展名(如果是Page组件),或者以.jwc作为扩展名(如果是非Page组件)。组件一般放在当前web应用的WEB-INF目录下面,以本例来说,我们的Home.page这个文件就应该放在webapps/Welcom/WEB-INF目录下面。 Home.java
最后一部分便是我们的demo.Home这个JAVA类,它实际上就是一个普通的javaBean,唯一不同的就是它必须从BasePage类中继承。它的作用就是为HTML模板中的user组件提供文本信息的来源,在本例中我们简单的返回”Jack”,但实际上getUserName方法还可以从JNDI、数据库、EJB中取得用户名。 其实demo.Home不仅仅只是提供数据来源,它还可以实现表单组件的提交。Tapestry提供了2个基本类方便用户进行扩充,一个是BasePage类(专用于Page组件),另一个是BaseComponent类(用于用户自定义组件)。通过继承这些组件,可以大大地减轻用户的编程量,从而把精力放到程序流程设计上去。 demo.Home组件类的名称应该与Home.page中定义的名称一致,它一般放在当前web应用的WEB-INF/classes目录下,以本例来说,Home.class这个类应该放在webapps/Welcome/WEB-INF/classes/demo目录下面。 Welcome.application
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |