使用 Mashups4JSF 生成和消费 Mashup Feed
在早先的一篇關(guān)于 Mashups4JSF 的文章中(參見(jiàn)?參考資料),我們了解了 Mashups4JSF 是什么,如何配置它,以及如何使用它構(gòu)建一個(gè)有用的 mashup 應(yīng)用程序。我們還了解了如何在 WebSphere Application Server V7.0 上結(jié)合使用庫(kù)和 Apache MyFaces 2.0 以及 IBM JWL (JavaServer Faces Widget Library)。
mashup 應(yīng)用程序中最常見(jiàn)的用例之一就是以 feed(RSS 或 Atom)的形式導(dǎo)出應(yīng)用程序的內(nèi)部數(shù)據(jù)。在 Mashups4JSF 出現(xiàn)之前,開(kāi)發(fā)人員需要從應(yīng)用程序 DTO(數(shù)據(jù)傳輸對(duì)象)中手動(dòng)生成 feed?,F(xiàn)在要感謝 Mashups4JSF,它使得以 feed 形式導(dǎo)出應(yīng)用程序數(shù)據(jù)變得更簡(jiǎn)單。
在本文中,我將解釋如何使用 Mashups4JSF feed 生成器服務(wù) (producer service) 以 RSS feed 的形式導(dǎo)出 Web 應(yīng)用程序數(shù)據(jù),以及如何通過(guò) feed 閱讀器組件使用這些數(shù)據(jù)。
瀏覽新聞應(yīng)用程序
新聞應(yīng)用程序是一個(gè) JavaServer Faces (JSF) 2.0 應(yīng)用程序,它在數(shù)據(jù)表中展示一個(gè)樣例新聞集,如?圖 1?所示,我們希望以 RSS feed 的方式導(dǎo)出這個(gè)樣例新聞集。
圖 1. 新聞樣例
?
新聞頁(yè)面的代碼非常簡(jiǎn)單。清單 1?展示了 news.xhtml 頁(yè)面中的新聞 dataTable 的 XHTML 代碼。
清單 1. news.xhtml 頁(yè)面中的新聞 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?通過(guò)表達(dá)式?#{newsList.news}?與?NewsList?DTO 綁定。清單 2?展示了?NewsList?DTO 的代碼。它包含新聞對(duì)象的靜態(tài)列表。它可以保存來(lái)自數(shù)據(jù)庫(kù)的真實(shí)數(shù)據(jù),但是為了簡(jiǎn)便起見(jiàn),這里使用了一個(gè)靜態(tài)列表。
清單 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?類(lèi)是一個(gè)非常簡(jiǎn)單的 bean。它僅包含以下屬性:
參見(jiàn)?清單 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;} } |
?
現(xiàn)在,讓我們看看如何以 RSS feed 的形式導(dǎo)出?NewsList?數(shù)據(jù)。
回頁(yè)首
以 RSS feed 的形式導(dǎo)出應(yīng)用程序數(shù)據(jù)
在詳細(xì)介紹以 RSS feed 的形式導(dǎo)出新聞列表之前,您可能需要了解如何為 JSP 2.0 應(yīng)用程序配置 Mashups4JSF 庫(kù),此前的一篇 Mashups4JSF 文章(參見(jiàn)?參考資料)介紹了這方面的內(nèi)容。在使用 Mashups4JSF feed servlet 時(shí),確保下載了 Mashups4JSF 0.0.3 的最新的穩(wěn)定快照(參見(jiàn)?參考資料)。
要使用 Mashups4JSF 以 RSS feed 的形式導(dǎo)出?NewsList?數(shù)據(jù),我們需要在 JSF 應(yīng)用程序中執(zhí)行下列步驟。
注冊(cè) Mashups4JSF feed servlet
在您的應(yīng)用程序的 web.xml 中注冊(cè) Mashups4JSF 的?MashupFeedServlet,如?清單 4?所示。
清單 4. 注冊(cè) 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 類(lèi)
使用?@Feed?注釋 feed 類(lèi)(NewsList?類(lèi)),并分別使用?@FeedTitle、@FeedDescription、@FeedLink?和?@FeedItems?指定標(biāo)題、描述、鏈接和 feed 項(xiàng)。清單 5?顯示了應(yīng)用注釋后的?NewsList?類(lèi)。
清單 5. 應(yīng)用注釋后的 NewsList 類(lèi)
| @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 項(xiàng)類(lèi)(News?類(lèi)),并分別使用?@ItemTitle、@ItemDescription、@ItemLink,?@ItemCategory?和@ItemAuthor?指定 feed 項(xiàng)的標(biāo)題、描述、鏈接、類(lèi)別和作者。?清單 6?顯示了應(yīng)用注釋后的?News?類(lèi)。
清單 6. 應(yīng)用注釋后的 News 類(lèi)
| @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;} } |
?
呈現(xiàn) feed
對(duì) feed 和 feed 項(xiàng)類(lèi)進(jìn)行注釋后,基本上已經(jīng)完成了全部工作。接下來(lái)要做的就是呈現(xiàn) feed,實(shí)現(xiàn)方式是將 feed 解析為 feed servlet 的參數(shù),并指定?rss?作為輸出,如?清單 7?所示。
清單 7. 通過(guò)將 feed 類(lèi)解析為 feed servlet 的參數(shù)呈現(xiàn) RSS feed?
| #{request.contextPath}/mashupFeedServlet?feedClass=dto.NewsList&output=rss |
?
圖 2 展示了以 RSS feed 的形式導(dǎo)出的?NewsList?feed。
圖 2. NewsList RSS feed?
?
如果希望以 ATOM feed 的形式導(dǎo)出 NewsList,那么需要將?atom?指定為 feed servlet 的輸出。
回頁(yè)首
通過(guò) feed 閱讀器使用 RSS feed
除了 RSS 和 ATOM feed 導(dǎo)出外,Mashups4JSF 還允許在 JSF 應(yīng)用程序內(nèi)部使用任何 RSS、ATOM 或 JSON feed。因此,讓我們來(lái)看看如何通過(guò)?rssFeedReader?組件使用我們剛剛為?NewsList?數(shù)據(jù)創(chuàng)建的 RSS feed。
清單 8?展示了如何在 consumer.xhtml 頁(yè)面中通過(guò)?rssFeedReader?組件使用 RSS feed。
清單 8. consumer.xhtml 頁(yè)面中的 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 所示,我們指定了以下內(nèi)容:
- RSS feed URL,
- 用于訪(fǎng)問(wèn) RSS 通道信息的 channel 變量(例如,description),
- item 變量,將訪(fǎng)問(wèn)所有 RSS feed 項(xiàng)(如?title、link?和?author),以及
- 項(xiàng)索引。
在 channel 部分中,我們可以指定希望為 RSS 通道顯示的屬性,而在 item 部分中,我們可以指定希望為每個(gè) feed 項(xiàng)顯示的屬性。
圖 3?展示了?NewsList?feed 的?rssFeedReader?輸出。
圖 3. NewsList RSS feed 的 rssFeedReader 輸出
?
結(jié)束語(yǔ)
除了各種 mashup 組件和服務(wù)之外,Mashups4JSF 還抽象化了為 JSF 應(yīng)用程序?qū)С龊蛯?dǎo)入 mashup feed 的方式。在 Mashups4JSF 出現(xiàn)之前,開(kāi)發(fā)人員需要從應(yīng)用程序 DTO(數(shù)據(jù)傳輸對(duì)象)中手動(dòng)生成 feed。現(xiàn)在要感謝 Mashups4JSF,它使得以 feed 的形式導(dǎo)出應(yīng)用程序數(shù)據(jù)變得更簡(jiǎn)單。在本文中,我們學(xué)習(xí)了如何使用 Mashups4JSF Feed Servlet 以 RSS feed 的形式表示 JSF 應(yīng)用程序數(shù)據(jù)。我們還了解了如何通過(guò) rssFeedReader 組件使用這些 feed。
?
參考資料
學(xué)習(xí)
- Mashups4JSF 簡(jiǎn)介:使 Mashups 更加簡(jiǎn)單(Hazem Saleh,developerWorks,2010 年 7 月):了解 Mashups4JSF 架構(gòu)和庫(kù)配置。在 WebSphere Application Server 7.0 上使用 Mashups4JSF 和 IBM JWL (JSF Widget Library) 創(chuàng)建具有少量代碼的 mashup 應(yīng)用程序。
- Apache MyFaces Project 主頁(yè):了解有關(guān) Apache Software Foundation 這一項(xiàng)目的更多信息。
- Mashups4JSF 主頁(yè):訪(fǎng)問(wèn) Mashups4JSF 庫(kù),它允許在 Java? 和 JSF 應(yīng)用程序中輕松地構(gòu)建 mashup。
- Mashups 和 JavaServer? Faces Integration Library:觀看 Mashups4JSF 演示。
- 感興趣的活動(dòng):了解即將到來(lái)的、面向 IBM 開(kāi)源開(kāi)發(fā)人員的會(huì)議、展覽和網(wǎng)絡(luò)廣播。?
- 隨時(shí)關(guān)注 developerWorks?技術(shù)活動(dòng)和網(wǎng)絡(luò)廣播。?
- 訪(fǎng)問(wèn) developerWorks?Open source 專(zhuān)區(qū)獲得豐富的 how-to 信息、工具和項(xiàng)目更新以及最受歡迎的文章和教程,幫助您用開(kāi)放源碼技術(shù)進(jìn)行開(kāi)發(fā),并將它們與 IBM 產(chǎn)品結(jié)合使用。
- Mashups4JSF 簡(jiǎn)介:使 Mashups 更加簡(jiǎn)單(Hazem Saleh,developerWorks,2010 年 7 月):了解 Mashups4JSF 架構(gòu)和庫(kù)配置。在 WebSphere Application Server 7.0 上使用 Mashups4JSF 和 IBM JWL (JSF Widget Library) 創(chuàng)建具有少量代碼的 mashup 應(yīng)用程序。
轉(zhuǎn)載于:https://www.cnblogs.com/chenying99/archive/2013/01/17/2864704.html
總結(jié)
以上是生活随笔為你收集整理的使用 Mashups4JSF 生成和消费 Mashup Feed的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 北漂周记--第8记--项目测试
- 下一篇: JAVA基础加强(张孝祥)_类加载器、分