[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中始终不得其解.
|