Да, ожидается, что разработчики будут создавать свои собственные компоненты, и это довольно легко сделать. Есть немало проектов, где люди создают свои библиотеки компонентов. Если вы хотите увидеть несколько примеров, взгляните на:
Компоненты очень похожи на страницы. У них обычно есть файл .tml и файл .java. Файл .java находится в каталоге src, который называется компонентами (src / main / java / com / examples / app / components), а файл .tml находится там же, но в ресурсах (src / main / resources / com / examples). / приложение / компоненты)
Ниже приведен пример компонента, который отображается в виде ссылки на общий доступ Facebook, которая ссылается на страницу EventInfo и принимает объект Event для создания URL-адреса для обмена на Facebook.
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"/>