在早先的一篇关于 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。它仅包含以下属性:

  1. Title
  2. Description
  3. Link
  4. Category
  5. Author

参见 清单 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 项(如 titlelink 和 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 产品结合使用。

转载于:https://www.cnblogs.com/chenying99/archive/2013/01/17/2864704.html

使用 Mashups4JSF 生成和消费 Mashup Feed相关推荐

  1. Kafka生成者/消费组详解

    什么是 Kafka Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区.多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系 ...

  2. Python统计微信消费!生成微信消费账单!真强大!

    First of all 通过观察,我发现我的微信消费类型大约有3种: 1.通过扫描商家二维码支付 2.直接进行商户消费 3.发红包给舍友让他们帮我带饭 接下来,我要统计具体的消费明细 一.准备工作 ...

  3. 【钱要花到刀刃上,该省省,该花花】你真的知道你花费到哪里去了吗?Python统计微信消费,生成微信消费账单。

    前言: 通过观察,我发现微信消费类型大约有3种: 1.通过扫描商家二维码支付 2.直接进行商户消费 3.发红包给舍友让他们帮我带饭 接下来,我们先进行准备工作 一.前言 有一定数量类似如下截图所示的账 ...

  4. Google Shopping Feed 数据整理之XML格式实现方法

    伴随着越来越多的外贸B2C电商企业开始投放Google PLA广告,Google Shopping Feed 的数据创建一直困扰着一些外贸电商企业:创建数据 Feed 时,一定要选择最适合商家需要的格 ...

  5. 生成对抗网络的背景与意义_生成对抗网络的意义

    生成对抗网络的背景与意义 为什么我们需要生成对抗网络:-(Why do we need Generative Adversarial Network: -) If we show a lot and ...

  6. 什么是Mash-up应用系统

    IBM Developer上对于Mash-up的解释:[url=http://www.ibm.com/developerworks/cn/xml/x-mashups.html]Mashups:Web ...

  7. 边缘计算 ai_在边缘探索AI!

    边缘计算 ai 介绍 (Introduction) What is Edge (or Fog) Computing? 什么是边缘(或雾)计算? Gartner defines edge computi ...

  8. 【翻译大老外的文】信息平台与数据科学的兴起

    原标题:Information Platforms and the Rise of the Data Scientist 原作者:Jeff Hammerbacher /* 作者简介: 杰夫·哈默巴赫, ...

  9. c 多线程运行混乱_一篇文章读懂 Python 多线程

    本文作者为 Michael Driscoll,是其新书 Python 201 的一节.本文译者为 linkcheng,由EarlGrey@编程派校对. 译者简介:linkcheng,专业电子信息工程. ...

最新文章

  1. 杭州网络推广带大家了解404页面的作用以及对网站优化的优势
  2. JavaScript 操作 COM 控件
  3. bartender外部表不是预期格式_三张表轻松搞定项目计划
  4. 初识Maven POM
  5. 你被人工智能给忽悠了吗?原来我们曾经认为的都是假的
  6. python或运算 和 in_Python’的奇怪行为是’运算符,如果与’in’结合使用[复制]
  7. 用Elman做时序预测
  8. 粗糙集的基础理论汇总
  9. Rocketmq中Topic、Tag、GroupName的设计思想
  10. 直播视频网站源码,登录界面LoginActivity
  11. Windows 7 纯净版各版本下载
  12. 2022低压电工考题模拟考试平台操作
  13. 100m光纤测速多少正常_100m光纤测速多少正常 所以100M宽带最大下载速度
  14. [Matlab] norm函数用法(用于RMSE和R2)
  15. linux下anjuta_[分享] Linux下用Anjuta写个Hello World 的C++程序竟如此简单!
  16. git reset,rebase,amend 使用实战
  17. 免费全球网络学习学院上线以支持妇女发展
  18. XRebel 第一次使用时激活
  19. java字符串==_Java字符串(String)
  20. 百度网盘安装在c盘显示系统权限限制的解决方法

热门文章

  1. C#学习笔记-XML的读写(一)
  2. 过程作为黑箱抽象——《计算机程序的构造和解释》
  3. Hadoop 分布式文件系统 - HDFS
  4. 浅谈DevExpress六:为chart创建动态数据源
  5. U811.1接口EAI系列之一--通用把XML传送给EAI处理方法--PowerBuilder语言
  6. 头插法、尾插法的理解
  7. Day12 前端html
  8. angularjs ngTable -Custom filter template-calendar
  9. 智能路由器操作系统OpenWrt
  10. 谈谈java的BlockingQueue