论坛首页 Java企业应用论坛

Tapestry 和 JSP/Taglib 的比较

浏览 29379 次
该帖已经被评为精华帖
作者 正文
   发表时间: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.
0 请登录后投票
   发表时间: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的解释和浏览器的种类有关?不知道哪位兄弟有这方面的经验?
0 请登录后投票
   发表时间: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>
     <!--
     -->
0 请登录后投票
   发表时间: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();;
    }
}
0 请登录后投票
   发表时间:2007-01-02  
Tapestry 引入的Object应该是放在和application/session context中的吧?
那它如何维护那些数据的生命期呢?

JSP只是一个template,它以request中的actionform为数据源,taglib为配置文件。

如果我们用了Tapestry,其实换句话来说,persentation layer就和moduler就有了一种关系,那就是全局的object name和页面中有了关联。

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics