You are coming a long way, baby~Thinking, feeling, memory...
Tin是一个热爱收集最佳实践的程序员。曾经在小型Java团队中担任架构师,后在新浪邮件部门领导RIA团队进行开发,目前是自由程序员,接受Java/ RIA/ RoR项目和咨询。 业余时间积极进行敏捷实践和参与社区讨论,对RoR和Django感兴趣。在社区中还积极参与开源项目的文档中文化工作。目前为InfoQ中文站做社区编辑。 业余爱好:编程、硬件、Mac、美术、音乐(Rock)、电影、摄影、集图、集邮、Quake3、旅行、美食
WebWork的result实现非常实用,它很好的解决了View渲染的灵活性问题。这才是MVC模式的优势所在,而像JSF那样帮定JSP的MVC就吃不到这个甜头了。说WebWork2是Model 2 MVC的巅峰就在这些灵活的地方。闲扯这个不是主要目的。现在Rome是Java下最常用的RSS包,最近消息似乎要转入Apache的Abdera合并变成更强大的聚合引擎。用Rome生成和解析RSS都很方便。今天讨论一下使用ROME给网站生成RSS,并通过WebWork2的Result机制渲染。最初是从WebWork的Cookbook上看到的RomeResult的文章,一看就会,我这里其实不过是举个详细点的例子,注意我使用的是WebWork 2.2.2和Rome 0.8:http://wiki.opensymphony.com/display/WW/RomeResult参考了和东的这篇Blog,利用rome写rss feed生成程序:http://hedong.3322.org/newblog/archives/000051.html
首先创建RomeResult类:
程序很简单。实现了Result接口,寻找一个与feedName参数匹配的SyndFeed实例,然后转换为指定的feedType类型,然后通过rome的SyndFeedOutput输出到Response去。然后我们给我们的WebWork配置romeResult。在xwork.xml中配置:
这样我们就给xwork配置了一个叫做feed的result,它就是我们的romeResult。然后我们实现一个类,来测试一下这个romeResult。
真是不好意思,Getter/Setter占了大部分地方我省略去了。逻辑很简单,就是把我们的POJO影射到Feed的模型上面,过程很简单。我留下了几个参数可以在外面设置:maxEntryNumber显示的feed的条数,链接生成时使用的SiteUrl,当然也可以通过request获取。下面我们配置我们的Action,注意平时我们可能使用DAO生成newsList,而不是我这个写死的getNewsList()方法,此时可能需要配合Spring进行IOC的设置,我们这里省略掉。下面是我们这个Action的xwork配置:
OK,配置完毕后访问/news/feed.action就可以访问到这个feed了。倒入你的feedDeamon,看看,是不是非常简单?不过需要考虑两个地方,一个是编码问题,看了和东说的中文问题,本没当回事,结果生成乱码(我们项目全部使用UTF-8),然后还是转了一下。没有研究ROME源代码,感觉xml不应该有UTF-8还会乱码的问题呀,也许还需要看看是否是设置不到位。还有就是对于feed如果增加了权限认证则访问比较麻烦,用feedDeamon这样的客户端就无法访问到了,因为它不会显示登陆失败后显示的登陆页面,也许放feed就要开放一点吧(当然还是有变通放案的)。和动例子里面的rome 0.7和现在的rome 0.8相比,Api已经发生了不少变化,唉,开源要代码稳定还真难。就这些,就到这里,粗陋了:D
Powered by: BlogJava Copyright © Tin