我一直在使用Tapestry的内置组件,但现在我想尝试制作自己的组件。假设这是可能的,那么它是如何实现的?通常预计开发人员除了开箱即用外,还将创建自己的组件?如何在Tapestry 5中创建组件?
3
A
回答
6
是的,预计开发人员将创建他们自己的组件,这很容易做到。在那里人们正在创建他们的组件库,其中有很多项目。如果你想看到一些例子来看看:
- http://chenillekit.org/demo/
- http://code.google.com/p/corner/
- http://code.google.com/p/myt5lib/
- http://tapestry.formos.com/nightly/tapx/tapx-datefield/
- http://code.google.com/p/tapestry5-treegrid/
组件很像页。他们通常有一个.tml文件和一个.java文件。 .java文件位于名为components(src/main/java/com/examples/app/components)的src目录中,并且.tml文件位于同一位置,但在资源(src/main/resources/com/examples/app/components)
这里是一个组件的例子,它呈现为一个Facebook共享链接,链接到EventInfo页面并接受一个Event对象以构建在Facebook上共享的URL。
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.persistence.Transient;
import net.xeric.register.entities.Event;
import org.apache.tapestry5.Link;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.PageRenderLinkSource;
public class ShareEventOnFacebook {
@Inject
private PageRenderLinkSource linkSource;
@Parameter(required=true)
@Property
private Event event;
public String getFacebookShareURL() {
Link link = linkSource.createPageRenderLinkWithContext("EventInfo", event);
String linkURL = "";
try {
linkURL = URLEncoder.encode(link.toAbsoluteURI(),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return linkURL;
}
public String getFacebookShareTitle() {
String returnValue = "";
try {
returnValue = URLEncoder.encode(event.getDescription(), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return returnValue;
}
}
请特别注意Event属性是如何标注以将其标记为必需参数的。这使得你的组件的参数,所以你可以在模板中说<t:shareeventonfacebook event="myEvent"/>
而相应的模板文件调用它:
<t:container
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
<a href="http://www.facebook.com/sharer.php?u=${facebookShareURL}">
Share on Facebook
</a><br/>
</t:container>
你想在你的页面模板中使用的组件使用:
<t:shareeventonfacebook event="event"/>
2
这不仅是可能的,但简单,有据可查。看看Tapestry documentation:Component classes,component templates,component events和component parameters中的相关位。实际上,页面只是顶层的组件,所以你应该感到宾至如归。
您还可以查看内置组件以了解它们的实现方式。
2
如果您一直在创建页面并使用现有组件,那么您已经创建了组件(页面是专用组件)。主要的区别是:
- 组件在不同的包
- 组件经常去没有一个模板(他们在代码中渲染)
- 组件可以有参数
请检查挂毯网站的所有其他细节。
相关问题
- 1. Tapestry 5 BeanEditForm组件故障
- 2. 我如何使用jQuery在自定义的Tapestry 5组件
- 3. Tapestry 5 + log4j2
- 4. 如何在Tapestry 5组件中获得父外壳程序的clientId?
- 5. 如何在Tapestry中为Map创建bean编辑模型?
- 6. 在Tapestry中重用页块5
- 7. 如何在rails 5中创建API?
- 8. 如何在joomla1.6中创建新组件?
- 9. 如何在Swing中创建此组件?
- 10. 如何在Joomla 1.5中创建组件?
- 11. 如何在javascript中创建html组件
- 12. 如何在Tapestry中隐藏额外的组件跨度标签?
- 13. 用Tapestry加载jQuery 5
- 14. 做tapestry 5支持vbscript吗?
- 15. Tapestry 5警报对话框
- 16. Tapestry 5用户认证
- 17. 如何在我的Tapestry 5应用程序中创建简单和重构的页面链接?
- 18. 如何在PHP ajax中创建5 X 5网格?
- 19. 如何在MVC 5中创建多租户视图结构5
- 20. 如何在xcode 5中创建Entitlement.plist文件?
- 21. 如何在asp.net中创建一个zip文件5
- 22. 如何在XCode 5中创建二进制文件
- 23. 如何在Angular2中的其他组件内创建组件
- 24. 如何获取Tapestry中的资产路径5
- 25. 如何从DOM元素中获取文本值Tapestry 5
- 26. 如何创建在5:30 AM
- 27. 如何在MVC创建字符串数组5
- 28. 如何在Tapestry 5中使用基类或接口与网格或循环组件?
- 29. Tapestry 5访问页面中使用的其他组件的属性/属性
- 30. 如何用Tapestry创建多个篮子选择