该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2004-08-25
Wod file to define the WO component in html page.
Wod file: UserRepetition:WORepetition{ list = userList; item = userItem; } UserName:WOString { value = userItem.name; } DeleteBtn:WOSubmitButton{ action = deleteThisUser; } UpdateBtn:WOSubmitButton{ action = updateThisUser; } And here is pure java code: Array userList; User userItem; public WOComponent deleteThisUser();{ --delete function return this.context();.page();; } public WOComponent updateThisUser();{ --update function return this.context();.page();; } Note: User object has name attribute. Now every code is sepaprated. |
|
返回顶楼 | |
发表时间:2005-06-16
最近刚刚用tapestry+spring+hibernate做了一个小项目,现在项目已经接近收尾工作了。
一开始选择tapestry的时候,感觉风险也比较大,需要转换以往的编程方式,而且网上的资料也相对比较缺。只能看tapestry自带的一些文档和tapestry in action,不过整个项目做下来,感觉Tapestry总的来说,还是挺好用的,界面和显示分离做得不错。 以前做网站项目,界面老改,不管是Jsp里 嵌java代码或者是用标记库,每次改界面风格,都是一个很痛苦的事情。可是用tapestry之后,界面所见即所得,美工用了也开心。这次项目做到一半的时候,又遇到一次界面全部改版,很轻松就把界面给换了。 当然,现在对Tapestry的掌握还不是很深,感觉Tapestry自己提供的组件太少,功能也比较受限制,不过好在Tapestry可以自己写Component,扩展性很强,但是要积累一套自己的组件库,要经过很多项目的开发才能总结出来。我想,如果Tapestry发展顺利得话,应该会出现一些优秀的开源Component吧。 但是我对Tapestry的Valid感觉有点不爽,感觉功能有些受限制,不管是服务端的valid,还是客户端自动生成Javascript代码,尤其是客户端自动生成的Javascript代码,自己想要扩充一些功能也很困难,还不如纯粹自己写Javascript呢,可以随心所欲。 还有遇到的一个问题是,我在Html模板中引入js的时候,使用IE的时候,老是报javascript错误: 缺少'/' ,但是使用 FireFox的时候,功能完全正常,也不报任何错。javascript 代码很简单: <script language="javascript" src="js/errorcheck.js"></script> 如果把js 里面的函数代码copy到页面上来,IE和FireFox都不出错,真是奇怪了。 难道是Tapestry对引入js的解释和浏览器的种类有关?不知道哪位兄弟有这方面的经验? |
|
返回顶楼 | |
发表时间:2005-06-16
albert_qhd 写道 响应,我就谈谈velocity吧 个人感觉velocity挺好的,又简单。既然tapestry还没有最佳实践,那就试试velocity吧 比如楼主那个例子,用velocity这么写: <html> <body> <table border=1> <tr> <td>name</td><td>link</td> </tr> <!-- #foreach ($user in $userList); --> <tr> <td>$user.userName</td><td><a href=update.do?id=$user.userId>update</a></td> </tr> <!-- #end --> <table> </body> </html> 其中velocity代码我用<!---->括起来了,因为这样在ie中就看不到这些代码了,保持跟实际一样的效果 大家可以用dreamweaver和ie打开看看,非常清晰,跟实际效果一模一样 用tapestry的话,你需要改变你web的编写方式,风险相对要大。而用velocity的话,你只需要把你的jsp改为velocity就可以了 不错的做法,循环2次之后,HTML是这样。 <!-- --> <tr> <td>$user.userName</td><td><a href=update.do?id=$user.userId>update</a></td> </tr> <!-- --> <tr> <td>$user.userName</td><td><a href=update.do?id=$user.userId>update</a></td> </tr> <!-- --> |
|
返回顶楼 | |
发表时间:2005-06-16
http://forum.iteye.com/viewtopic.php?t=13350&postdays=0&postorder=asc&start=15
buaawhl 写道 gzdlw 写道 在RAD里面试用JSF,我感觉实际上JSF仍然没有完全脱离标签模式,至少没有Tapestry做得这么好。Tapestry对HTML的侵入可以少到仅仅只有一个jwcid属性,可以不添加或修改任何标签或声明。JSF虽然号称可以直接使用IDE像VB一样直接图形化组件修改。但是程序员仍然需要在代码中手工添加如form等HTML标签。仍然需要在代码中及各种标签中,像JSP那样以面向元素的思维来考虑页面逻辑,说直白点,我的感觉是,JSF仅仅是通过一些特殊的标签识别JSP中的java代码,使得这些JAVA代码可以单独放在一个文件中。 template 都免不了加入自己的标签。没有标签的template只有pure html. 比如 Jivan/xmlc/javascript 等方案。 Tapestry使用HTML标签的属性作为标签,能够达到“所见即所得”的效果。 从实现上来看,Tapestry的Page Component和 TagLib没什么区别。都要在代码里面输出HTML标签,都要处理Tag Begin/End。如form package下面的那些page component. 如果要自定义组件,写法和实现TagSupport也差不多。 public class CheckBoxMultiplePropertySelectionRenderer implements IMultiplePropertySelectionRenderer { /** * Writes the &table& element. * **/ public void beginRender( MultiplePropertySelection component, IMarkupWriter writer, IRequestCycle cycle); { writer.begin("table");; writer.attribute("border", 0);; writer.attribute("cellpadding", 0);; writer.attribute("cellspacing", 2);; } /** * Closes the &table& element. * **/ public void endRender( MultiplePropertySelection component, IMarkupWriter writer, IRequestCycle cycle); { writer.end();; // <table> } /** * Writes a row of the table. The table contains two cells; the first is the checkbox, * the second is the label for the checkbox. * **/ public void renderOption( MultiplePropertySelection component, IMarkupWriter writer, IRequestCycle cycle, IPropertySelectionModel model, Object option, int index, boolean selected); { writer.begin("tr");; writer.begin("td");; writer.beginEmpty("input");; writer.attribute("type", "checkbox");; writer.attribute("name", component.getName(););; writer.attribute("value", model.getValue(index););; if (component.isDisabled();); writer.attribute("disabled", "disabled");; if (selected); writer.attribute("checked", "checked");; writer.end();; // <td> writer.println();; writer.begin("td");; writer.print(model.getLabel(index););; writer.end();; // <td> writer.end();; // <tr> writer.println();; } } |
|
返回顶楼 | |
发表时间:2007-01-02
Tapestry 引入的Object应该是放在和application/session context中的吧?
那它如何维护那些数据的生命期呢? JSP只是一个template,它以request中的actionform为数据源,taglib为配置文件。 如果我们用了Tapestry,其实换句话来说,persentation layer就和moduler就有了一种关系,那就是全局的object name和页面中有了关联。 |
|
返回顶楼 | |