[Tapestry3] InspectorButton 如何使用

javabill 2007-01-10
学习tapestry有一个星期了,对以下几个问题
1.<span jwcid="@contrib:InspectorButton"/> 这个组件应该怎么用
2.有谁能描述一下tapestry组件执行原理吗,就是tag接口来描述一下其内部方法的行为,因为这对使用组件和创建组件非常重要的
3.我看的是tapestry3,但是4之后区别太大,有谁解说一下里面主要类行为的变化吗,也就是在编码要注意不同的地方
比如说PageRenderListener 接口不支持了,增加了public void pageValidate(PageEvent event)方法
tapestry 2007-01-10
1.直接用就可以了,放在Body组件里,用来查看页面的一些属性,例如包含那些组件了什么的,很多,自己用一下就知道了。
<body jwcid="@Body">
<span jwcid="@contrib:InspectorButton"/>
</body>
2、组件执行原理这个跟页面执行一样的,比如有这样个组件
<span jwcid="@Insert" value="ognl:message">message</span>,T在读到这里的时候,看到jwcid标记,知道它是一个组件,组件为Insert组件,然后它会找Insert组件的定义,调用它的renderComponent方法,并传给他页面类的实例,Insert组件会调用 页面类实例.getMessage() 这样的方法,renderComponent中有两个参数IMarkupWriter和IRequestCycle ,IMarkupWriter用来输出html标签,IRequestCycle 用来传递上下文环境。这个是没有html模版的组件,有html模版的组件更简单,就跟页面一样的原理,只是到标记那里,自动替换成组件定义的html。
3、PageRenderListener 被分为两个接口了,分别是PageBeginRenderListener和PageEndRenderListener,其他的区别,google一下Tapestry4的新特性,那是很早以前我写的系列文章,应该可以google到。javaeye也有发表http://www.iteye.com/t/13718.html

javabill 2007-01-10
非常感谢您的回复!!:)

我的boder.html文件内容如下:
<html jwcid="shell" stylesheet="ognl:assets.stylesheet">
<body jwcid="@Body">
 
   
    <span jwcid="@Conditional" condition="ognl:register">
<table width="46%" height="11%" border="1">
  <tr align="center">
    <td width="50%" height="17" align="center"><strong jwcid="@Insert" value="ognl:username">用户名称</strong></td>
    <td width="17%"><a href="#" jwcid="@PageLink" page="FirstPage">购买</a></td>
    <td width="15%"><a href="#" jwcid="@ExternalLink" page="SecondPage" parameters='ognl:new java.lang.Integer("1")'>帐目</a></td>
    <td width="18%"><a href="#" jwcid="@DirectLink" listener="ognl:listeners.clearUser">注销用户</a></td>
   
<!--在这里使用inspector-->
<td><span jwcid="@contrib:InspectorButton"/></td>
    
  </tr>
</table>
  </span>

<!-- BEGIN body content -->
  <span jwcid="@RenderBody"/>
<!-- END body content -->  

</body>

</html>
不过就我用inspector组件时间发生了以下错误,使用tapestry3,不知道问题在哪里,郁闷得很呢
org.apache.tapestry.ApplicationRuntimeException
Unable to instantiate component Home/$Border.inspector: org.apache.tapestry.resource.ContextResourceLocation
component: org.apache.tapestry.contrib.inspector.InspectorButton$Enhance_3@14596d5[Home/$Border.inspector]
location: context:/WEB-INF/Border.jwc, line 18, column 63
  
java.lang.ClassCastException
org.apache.tapestry.resource.ContextResourceLocation
Stack Trace:
org.apache.tapestry.pageload.PageLoader.convert(PageLoader.java:909)
org.apache.tapestry.pageload.PageLoader.addAssets(PageLoader.java:838)
org.apache.tapestry.pageload.PageLoader.constructComponent(PageLoader.java:512)
org.apache.tapestry.pageload.PageLoader.constructComponent(PageLoader.java:504)
org.apache.tapestry.pageload.PageLoader.createImplicitComponent(PageLoader.java:577)
org.apache.tapestry.BaseComponentTemplateLoader.createImplicitComponent(BaseComponentTemplateLoader.java:295)
tapestry 2007-01-10
确保以下配置:
1.application定义了contrib库,
<library id="contrib" specification-path="/org/apache/tapestry/contrib/Contrib.library"/>
2、类路径里有tapestry-contrib-3.0.x.jar文件
javabill 2007-01-10
再次感谢tapestry回答
<library id="contrib" specification-path="/org/apache/tapestry/contrib/Contrib.library"/> 在我的xx.application文件已经有这个配置,这个例子是网上下的,我只是在加一些代码。不知道是什么原因导至的
javabill 2007-01-10
刚才我在测试一下我在tapestry4.02中测试ok,我在之前的tapestry3.04中始终不得其解.
Global site tag (gtag.js) - Google Analytics