我一直在使用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創建多個籃子選擇