我一直在使用Tapestry的内置组件,但现在我想尝试制作自己的组件.假设这是可能的,它是如何完成的,并且通常期望开发人员除了开箱即用之外还将创建自己的组件?
是的,预计开发人员将创建自己的组件,这很容易做到.有很多项目在那里人们正在创建他们的组件库.如果你想看一些例子,请看看:
组件很像页面.它们通常有.tml文件和.java文件..java文件位于名为components(src/main/java/com/examples/app/components)的src目录中,.tml文件位于同一位置,但位于资源下(src/main/resources/com/examples /应用/组件)
下面是一个组件示例,该组件呈现为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;
}
}
Run Code Online (Sandbox Code Playgroud)
请特别注意如何对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>
Run Code Online (Sandbox Code Playgroud)
您想要在您使用的页面模板中使用该组件:
<t:shareeventonfacebook event="event"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4474 次 |
| 最近记录: |