﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Chords-随笔分类-Frails</title><link>http://www.blogjava.net/chords/category/20663.html</link><description>Endeering Chords Make Melody</description><language>zh-cn</language><lastBuildDate>Mon, 30 Apr 2007 01:53:04 GMT</lastBuildDate><pubDate>Mon, 30 Apr 2007 01:53:04 GMT</pubDate><ttl>60</ttl><item><title>使用Frails快速搭建Spring+Hibernate+JSF项目</title><link>http://www.blogjava.net/chords/archive/2007/04/29/114639.html</link><dc:creator>Coody Sk8er</dc:creator><author>Coody Sk8er</author><pubDate>Sun, 29 Apr 2007 11:53:00 GMT</pubDate><guid>http://www.blogjava.net/chords/archive/2007/04/29/114639.html</guid><wfw:comment>http://www.blogjava.net/chords/comments/114639.html</wfw:comment><comments>http://www.blogjava.net/chords/archive/2007/04/29/114639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chords/comments/commentRss/114639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chords/services/trackbacks/114639.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文主要介绍了如何利用Frails框架进行快速开发。在本文中我们的目标是架构起一个Spring+JSF+Hibernate的项目，并且实现后台代码。您会发现，原本仅仅实现一个Spring框架就要话很长时间的“痛苦”过程，在Frails框架和模板的帮助下，几乎喝杯咖啡的功夫就可以搞定了。您甚至会发现，不需要写任何SQL或者数据库相关代码就能够实现几乎可以覆盖全部的数据库操作需求。通过本文，您一定会喜欢上在Frails框架帮助下快速开发的感觉。&nbsp;&nbsp;<a href='http://www.blogjava.net/chords/archive/2007/04/29/114639.html'>阅读全文</a><img src ="http://www.blogjava.net/chords/aggbug/114639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chords/" target="_blank">Coody Sk8er</a> 2007-04-29 19:53 <a href="http://www.blogjava.net/chords/archive/2007/04/29/114639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Frails使JSF成为主流！</title><link>http://www.blogjava.net/chords/archive/2007/03/15/103910.html</link><dc:creator>Coody Sk8er</dc:creator><author>Coody Sk8er</author><pubDate>Wed, 14 Mar 2007 17:08:00 GMT</pubDate><guid>http://www.blogjava.net/chords/archive/2007/03/15/103910.html</guid><wfw:comment>http://www.blogjava.net/chords/comments/103910.html</wfw:comment><comments>http://www.blogjava.net/chords/archive/2007/03/15/103910.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/chords/comments/commentRss/103910.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chords/services/trackbacks/103910.html</trackback:ping><description><![CDATA[长久以来，JSF一直没有成为WEB框架的主流，不仅是遗留系统的原因，JSF原始的标准并没有使得开发简化和清晰。一直不断有这样或者那样的小问题阻碍着JSF成为绝对主流。<br /><br />        事实上，JSF的目标是相当不错的，希望代码人员能和美工分离，并且能够快速的开发。但是其中的一些有待解决的问题，貌似与初衷相违背：烦琐的配置，比较依赖开发工具，不够灵活等等。直到Frails这个JSF框架的诞生，JSF以往的烦恼都解决了。Frails能帮助你快速的开发JSF，效率可以和ROR媲美！<br /><br />        你可以在Souceforge找到这个项目 <a href="https://sourceforge.net/projects/frails">https://sourceforge.net/projects/frails</a> 。中文站为<a href="http://frails.hexiao.cn/">http://frails.hexiao.cn/</a> 。 目前Frails的最新版本是1.2，不过马上2.0就要发布了。<br />  <br />  Frails的特性如下：<br /><ul><li><b>Frails 让开发者使用约定(习惯)和注解(annotations)来省略在 faces-config.xml 文件中 managed-bean 和 navigation-rule的配置. </b></li><li><b>Frails 提供一个更简单的方法来使用 Faces API. </b></li><li><b>Frails 重定向非 faces 请求为一个 faces 请求,这样可以避免因为URL输入的疏忽导致的异常. </b></li><li><b>Frails 提供一些预定义的 Managed Bean 基类让开发者扩展 . </b></li><li><b>Frails 可以让开发者在 Managed Bean 中使用注解(Annotation)来支持AOP功能 ,如 函数拦截(method interception). </b></li><li><b>Frails 提供 Managed Bean 属性的injection 和 outjection </b></li><li><b>Frails 中的Hibernate GenericDao 对象提供了基本的 CRUD 函数 和 其他一些有用(常用)的数据访问函数. </b></li><li><b>Frails 还提供了一些有用的注解(annotations)来简化JSF的开发. </b></li><li><b>Frails 完全支持 jsf 1.1 和 jsf 1.2 规范,并且可以自动的探测你使用的版本. </b></li><li><b>Frails 提供了对action Method 和 Listener 函数的增强,在这些函数中现在你可以传递参数了. </b></li></ul><p>        作为一名Frails的开发人员，我会继续写很多关于Frails的文章。不过先在这里简单的展示一下Frails的几个特性，如果你要详细的察看使用方法，请到 <a href="http://frails.hexiao.cn/user-guide.html">http://frails.hexiao.cn/user-guide.html</a><br /><br /><font color="#ff0000"><strong>不需要配置faces-config.xml</strong></font><br />       再也不需要在faces-config.xml里一个个的写导航规则，注册ManageBean了。在Frails框架下注册一个ManageBean只需要在Bean的Class文件前加上@DefMbean这样的Annotation就可以了。而导航会根据一定的导航规则实现。比如导航去index.jsp就可以直接返回"index"就可以了，当然，还有更灵活的方式。<br /><br /><br /><font color="#ff0000"><strong>轻松实现GET</strong></font><br />        URL里加上参数－值对能够轻松的解析出来了，甚至不需要写方法。在一个String属性前加上@Param（name=paramName）后，这个属性就自动获得来自URL里paramName的值。如：</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">@Param(name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">paraName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />String paVa;</span></div><p>URL是./xxx.jsp?paraName=Yes 那么paVa的值就是Yes。<br />        <br />        而在一个无返回方法前加上@PreRender后，这个方法将回在页面渲染前调用，提前获取一些相关的信息。如：</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">@PreRender<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> preRender()<br /><img id="Codehighlighter1_35_79_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_79_Open_Text.style.display='none'; Codehighlighter1_35_79_Closed_Image.style.display='inline'; Codehighlighter1_35_79_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_35_79_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_35_79_Closed_Text.style.display='none'; Codehighlighter1_35_79_Open_Image.style.display='inline'; Codehighlighter1_35_79_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_35_79_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_35_79_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">do something for rendering the page</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">}</span></span></div><p><br />　　当然了，Frails提供了让方法在各个声明周期得到调用的Annotations，不仅仅是预渲染。<br /><br /><br /><font color="#ff0000"><strong>从烦琐的验证中解脱<br /></strong></font>        Frails使得你能在申明一个属性的时候就能快速简单的加上一些限制条件，成为这个属性的验证器。如下</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">@Prop<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    @ValidateNumber(required </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">, max </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">33</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, id </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">indexForm:id</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, message </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">error.id.invalid</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> id;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><p>       这样就使得在setID的时候根据需要进行验证，而不必再写validate方法。<br /><br /><br /><font color="#ff0000"><strong>使用简单、功能强大的JSFHelper</strong></font><br />        例如,如果一个对象要放入HttpSession. 使用标准的 Faces API, 代码如下:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">  FacesContext.getCurrentInstance().getExternalContext()<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  .getSessionMap().put(name, val); </span></div><p>        如果使用 JSFHelper,代码是如此的简单:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">JSFHelper.putIntoSession(name, val);</span></div><p>        当然，JSFHelper还有很多其他的功能。如导航功能，能将页面之间的数据最大化独立开，之间的联系只需要规定有什么属性就可以了。（以后会详细介绍：Frails下网站快速开发模式）<br /><br />还有很多特性，帮助你快速开发JSF。当你真正体验过Frails后，你就回发现JSF一统天下的时代的来临！<br /></p><img src ="http://www.blogjava.net/chords/aggbug/103910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chords/" target="_blank">Coody Sk8er</a> 2007-03-15 01:08 <a href="http://www.blogjava.net/chords/archive/2007/03/15/103910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>