javascript
使用 Mashups4JSF 生成和消费 Mashup Feed
在早先的一篇關于 Mashups4JSF 的文章中(參見?參考資料),我們了解了 Mashups4JSF 是什么,如何配置它,以及如何使用它構建一個有用的 mashup 應用程序。我們還了解了如何在 WebSphere Application Server V7.0 上結合使用庫和 Apache MyFaces 2.0 以及 IBM JWL (JavaServer Faces Widget Library)。
mashup 應用程序中最常見的用例之一就是以 feed(RSS 或 Atom)的形式導出應用程序的內部數據。在 Mashups4JSF 出現之前,開發人員需要從應用程序 DTO(數據傳輸對象)中手動生成 feed。現在要感謝 Mashups4JSF,它使得以 feed 形式導出應用程序數據變得更簡單。
在本文中,我將解釋如何使用 Mashups4JSF feed 生成器服務 (producer service) 以 RSS feed 的形式導出 Web 應用程序數據,以及如何通過 feed 閱讀器組件使用這些數據。
瀏覽新聞應用程序
新聞應用程序是一個 JavaServer Faces (JSF) 2.0 應用程序,它在數據表中展示一個樣例新聞集,如?圖 1?所示,我們希望以 RSS feed 的方式導出這個樣例新聞集。
圖 1. 新聞樣例
?
新聞頁面的代碼非常簡單。清單 1?展示了 news.xhtml 頁面中的新聞 dataTable 的 XHTML 代碼。
清單 1. news.xhtml 頁面中的新聞 dataTable?
| <h:dataTable id="newsTable" value="#{newsList.news}" var="varnews"styleClass="standardTable" headerClass="standardTable_Header"footerClass="standardTable_Footer" rowClasses="standardTable_Row1, standardTable_Row2"columnClasses="standardTable_Column"><h:column id="titleColumn"><f:facet name="header"><h:outputText value="#{messages.application_label_title}" id="titleText"></h:outputText></f:facet><h:outputLink value="#{varnews.link}"><h:outputText id="title" value="#{varnews.title}"></h:outputText></h:outputLink></h:column><h:column id="authorColumn"><f:facet name="header"><h:outputText value="#{messages.application_label_author}" id="authorText"></h:outputText></f:facet><h:outputText id="author" value="#{varnews.author}"></h:outputText></h:column><h:column id="categoryColumn"><f:facet name="header"><h:outputText value="#{messages.application_label_category}" id="categoryText"></h:outputText></f:facet><h:outputText id="category" value="#{varnews.category}"></h:outputText></h:column><h:column id="descColumn"><f:facet name="header"><h:outputText value="#{messages.application_label_description}" id="descText"></h:outputText></f:facet><h:outputText id="desc" value="#{varnews.desc}"></h:outputText></h:column> </h:dataTable> |
?
newsTable?通過表達式?#{newsList.news}?與?NewsList?DTO 綁定。清單 2?展示了?NewsList?DTO 的代碼。它包含新聞對象的靜態列表。它可以保存來自數據庫的真實數據,但是為了簡便起見,這里使用了一個靜態列表。
清單 2. NewsList DTO
| @ManagedBean public class NewsList {static List <News> news = new ArrayList<News>();// Sample news liststatic {for (int i = 0; i < 10; ++i) {news.add(new News("Title" + i, "Description" + i, "http://www.google.com/search?q=" + i, "Category" + i, "Author" + i));}}public List<News> getNews() {return news;} } |
?
News?類是一個非常簡單的 bean。它僅包含以下屬性:
參見?清單 3。
清單 3. News DTO
| public class News {private String title;private String desc;private String link;private String category;private String author;...public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public String getLink() {return link;}public void setLink(String link) {this.link = link;}public String getCategory() {return category;}public void setCategory(String category) {this.category = category;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;} } |
?
現在,讓我們看看如何以 RSS feed 的形式導出?NewsList?數據。
回頁首
以 RSS feed 的形式導出應用程序數據
在詳細介紹以 RSS feed 的形式導出新聞列表之前,您可能需要了解如何為 JSP 2.0 應用程序配置 Mashups4JSF 庫,此前的一篇 Mashups4JSF 文章(參見?參考資料)介紹了這方面的內容。在使用 Mashups4JSF feed servlet 時,確保下載了 Mashups4JSF 0.0.3 的最新的穩定快照(參見?參考資料)。
要使用 Mashups4JSF 以 RSS feed 的形式導出?NewsList?數據,我們需要在 JSF 應用程序中執行下列步驟。
注冊 Mashups4JSF feed servlet
在您的應用程序的 web.xml 中注冊 Mashups4JSF 的?MashupFeedServlet,如?清單 4?所示。
清單 4. 注冊 Mashups4JSF feed servlet
| <servlet><servlet-name>mashupFeedServlet</servlet-name><servlet-class>com.googlecode.mashups.servlets.MashupFeedServlet</servlet-class> </servlet><servlet-mapping><servlet-name>mashupFeedServlet</servlet-name><url-pattern>/mashupFeedServlet</url-pattern> </servlet-mapping> |
?
注釋 feed 類
使用?@Feed?注釋 feed 類(NewsList?類),并分別使用?@FeedTitle、@FeedDescription、@FeedLink?和?@FeedItems?指定標題、描述、鏈接和 feed 項。清單 5?顯示了應用注釋后的?NewsList?類。
清單 5. 應用注釋后的 NewsList 類
| @ManagedBean @Feed public class NewsList {static List <News> news = new ArrayList<News>();// Sample news liststatic {for (int i = 0; i < 10; ++i) {news.add(new News("Title" + i, "Description" + i, "http://www.google.com/search?q=" + i, "Category" + i, "Author" + i));}}@FeedItemspublic List<News> getNews() {return news;}@FeedTitlepublic String getTitle() {return TITLE;}@FeedDescriptionpublic String getDescription() {return DESCRIPTION;}@FeedLinkpublic String getLink() {return LINK;}private final String TITLE = "News List";private final String DESCRIPTION = "News List Description";private final String LINK = "http://somenewschannel.com"; } |
?
使用?@ItemFeed?注釋 feed 項類(News?類),并分別使用?@ItemTitle、@ItemDescription、@ItemLink,?@ItemCategory?和@ItemAuthor?指定 feed 項的標題、描述、鏈接、類別和作者。?清單 6?顯示了應用注釋后的?News?類。
清單 6. 應用注釋后的 News 類
| @FeedItem public class News {private String title;private String desc;private String link;private String category;private String author;...@ItemTitlepublic String getTitle() {return title;}public void setTitle(String title) {this.title = title;}@ItemDescriptionpublic String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}@ItemLinkpublic String getLink() {return link;}public void setLink(String link) {this.link = link;}@ItemCategorypublic String getCategory() {return category;}public void setCategory(String category) {this.category = category;}@ItemAuthorpublic String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;} } |
?
呈現 feed
對 feed 和 feed 項類進行注釋后,基本上已經完成了全部工作。接下來要做的就是呈現 feed,實現方式是將 feed 解析為 feed servlet 的參數,并指定?rss?作為輸出,如?清單 7?所示。
清單 7. 通過將 feed 類解析為 feed servlet 的參數呈現 RSS feed?
| #{request.contextPath}/mashupFeedServlet?feedClass=dto.NewsList&output=rss |
?
圖 2 展示了以 RSS feed 的形式導出的?NewsList?feed。
圖 2. NewsList RSS feed?
?
如果希望以 ATOM feed 的形式導出 NewsList,那么需要將?atom?指定為 feed servlet 的輸出。
回頁首
通過 feed 閱讀器使用 RSS feed
除了 RSS 和 ATOM feed 導出外,Mashups4JSF 還允許在 JSF 應用程序內部使用任何 RSS、ATOM 或 JSON feed。因此,讓我們來看看如何通過?rssFeedReader?組件使用我們剛剛為?NewsList?數據創建的 RSS feed。
清單 8?展示了如何在 consumer.xhtml 頁面中通過?rssFeedReader?組件使用 RSS feed。
清單 8. consumer.xhtml 頁面中的 rssFeedReader 組件
| <mashup:rssFeedReader feedURL="http://#{facesContext.externalContext.request.remoteHost}:#{facesContext.externalContext.request.localPort} #{facesContext.externalContext.request.contextPath}/mashupFeedServlet?feedClass=dto.NewsList&output=rss"maximumCount="5"channelVar="channel"itemVar="item"itemIndex="itemIndex"><f:facet name="channel"><h4>#{messages.application_channel_desc}#{channel.description}</h4></f:facet><f:facet name="item"><b>#{messages.application_item_index} </b>#{itemIndex}<br /><b>#{messages.application_item_title} </b>#{item.title}<br /><b>#{messages.application_item_link} </b><h:outputLink value="#{item.link}">#{item.link}</h:outputLink><br /><b>#{messages.application_item_author} </b>#{item.author}<br /><b>#{messages.application_item_category} </b>#{item.categories[0].name}<br /><br /></f:facet> </mashup:rssFeedReader> |
?
如清單 8 所示,我們指定了以下內容:
- RSS feed URL,
- 用于訪問 RSS 通道信息的 channel 變量(例如,description),
- item 變量,將訪問所有 RSS feed 項(如?title、link?和?author),以及
- 項索引。
在 channel 部分中,我們可以指定希望為 RSS 通道顯示的屬性,而在 item 部分中,我們可以指定希望為每個 feed 項顯示的屬性。
圖 3?展示了?NewsList?feed 的?rssFeedReader?輸出。
圖 3. NewsList RSS feed 的 rssFeedReader 輸出
?
結束語
除了各種 mashup 組件和服務之外,Mashups4JSF 還抽象化了為 JSF 應用程序導出和導入 mashup feed 的方式。在 Mashups4JSF 出現之前,開發人員需要從應用程序 DTO(數據傳輸對象)中手動生成 feed。現在要感謝 Mashups4JSF,它使得以 feed 的形式導出應用程序數據變得更簡單。在本文中,我們學習了如何使用 Mashups4JSF Feed Servlet 以 RSS feed 的形式表示 JSF 應用程序數據。我們還了解了如何通過 rssFeedReader 組件使用這些 feed。
?
參考資料
學習
- Mashups4JSF 簡介:使 Mashups 更加簡單(Hazem Saleh,developerWorks,2010 年 7 月):了解 Mashups4JSF 架構和庫配置。在 WebSphere Application Server 7.0 上使用 Mashups4JSF 和 IBM JWL (JSF Widget Library) 創建具有少量代碼的 mashup 應用程序。
- Apache MyFaces Project 主頁:了解有關 Apache Software Foundation 這一項目的更多信息。
- Mashups4JSF 主頁:訪問 Mashups4JSF 庫,它允許在 Java? 和 JSF 應用程序中輕松地構建 mashup。
- Mashups 和 JavaServer? Faces Integration Library:觀看 Mashups4JSF 演示。
- 感興趣的活動:了解即將到來的、面向 IBM 開源開發人員的會議、展覽和網絡廣播。?
- 隨時關注 developerWorks?技術活動和網絡廣播。?
- 訪問 developerWorks?Open source 專區獲得豐富的 how-to 信息、工具和項目更新以及最受歡迎的文章和教程,幫助您用開放源碼技術進行開發,并將它們與 IBM 產品結合使用。
- Mashups4JSF 簡介:使 Mashups 更加簡單(Hazem Saleh,developerWorks,2010 年 7 月):了解 Mashups4JSF 架構和庫配置。在 WebSphere Application Server 7.0 上使用 Mashups4JSF 和 IBM JWL (JSF Widget Library) 創建具有少量代碼的 mashup 應用程序。
轉載于:https://www.cnblogs.com/chenying99/archive/2013/01/17/2864704.html
總結
以上是生活随笔為你收集整理的使用 Mashups4JSF 生成和消费 Mashup Feed的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北漂周记--第8记--项目测试
- 下一篇: 关于“让我们基于Node.js创建一个W