使用JSF的人都知道,JSF本身是一个很优秀的Web Model 2框架, 具有很多优秀的思想.
但是有些时候JSF的使用还是不是十分方便. 尤其是对于初学者而言, 常常被一些莫明其妙的问题搞得晕头转向.
相信很多初学者都见到过这个Exception吧:
严重: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: Cannot find FacesContext
当我在学习JSF的时候,看到这个Exception我找了半天都没有发现我的代码哪里错了(代码不可能出错,因为是直接copy的书中的源代码 呵呵), 后来不经意间才发现原来访问页面的URL错了, 在JSF配置文件中配置的servlet映射为.jsf,所以访问的URL应该是 .... index.jsf, 而不是.... index.jsp., 就这么一点疏忽就让人白忙活了半天. 郁闷哦.
随着学习的深入,这种基本错误是很少再出现了(就算出现也可以马上知道问题的根本), 但是JSF其他的一些限制又是让人感到很郁闷的. 比如 Form数据的提交, JSF规范中为了维护服务端的组件树 只能使用Post提交, 而不可以使用Get. 而Get方法在很多地方还是非常有用的.
另外还有Faces API使用起来不是十分直接的问题, 要把一个数据放入到session中就要一大串的操作( FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(name, val); ),让人感觉很不爽.
....
如果你经常遇到这些问题, 那么现在我将告诉你一个好消息, 有了Frails 这些问题都可以轻而易举的解决了.
我们先来看看Frails是什么?
在Frails主页上定义
http://frails.hexiao.cn/what-is-frails.htmlwhat is frails?
Frails 是基于JSF上的一个开发效率和RoR可以向媲美的JavaEE框架 !
Ruby On Rails(RoR)因为在开发web程序的高效性而风行一时(可能现在仍然很热), 那些RoR的支持者说, RoR可以比java的开发效率高出10倍以上,我们对此观点持怀疑的态度. 我们相信,如果有正确的开发方法来支持现在的Java web framework,则 Java web开发的效率 不会如此的低下.所以 我们研究了一下RoR的实现机制,来实现我们Java框架中的RoR. 因此, 我们提供一个在开发效率上和RoR可以媲美的JavaEE开发框架 -- Frails !
知道了Frails是什么后, 我们再来看看Frails有什么特性, 能给JSF带来什么功能上的增强.
在Frails主页上列举了Frails的如下主要特性:
http://frails.hexiao.cn/frails-features.htmlFrails(Java Server Faces On Rails)基于Java Server Faces (JSF),并将提供对 Hibernate和Spring的支持. 主要特征如下:
Frails 让开发者使用约定(习惯)和注解(annotations)来省略在 faces-config.xml 文件中 managed-bean 和 navigation-rule的配置.
Frails 提供一个更简单的方法来使用 Faces API.
Frails 重定向非 faces 请求为一个 faces 请求,这样可以避免因为URL输入的疏忽导致的异常.
Frails 提供一些预定义的 Managed Bean 基类让开发者扩展 .
Frails 可以让开发者在 Managed Bean 中使用注解(Annotation)来支持AOP功能 ,如 函数拦截(method interception).
Frails 提供 Managed Bean 属性的injection 和 outjection
Frails 中的Hibernate GenericDao 对象提供了基本的 CRUD 函数 和 其他一些有用(常用)的数据访问函数.
Frails 还提供了一些有用的注解(annotations)来简化JSF的开发.
Frails 完全支持 jsf 1.1 和 jsf 1.2 规范,并且可以自动的探测你使用的版本.
Frails 提供了对action Method 和 Listener 函数的增强,在这些函数中现在你可以传递参数了.
知道这这么多Frails的东东, 那么你不禁要问,如何使用Frails呢.
这个是很简单的. 你只需要在web.xml文件中添加下面的配置:
<filter>
<filter-name>FacesFilter</filter-name>
<filter-class>net.sf.frails.filters.FacesFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FacesFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后把你下载的frails4jsf1.X.jar 放到类路径中就可以使用了.
现在可以使用了, 你不禁要问, 如果在使用过程中我遇到了问题, 要到哪里得到帮助呢,如果我有好的Frails改进建议要到哪里提议呢.
关于frails的服务问题, 你可以到JavaCafe
http://www.hexiao.cn/jsf/ 论坛的Frails专区中取得帮助.
ok, 这次Frails 简介就先到这里, 希望Frails能在你开发Java web app时给你带来一丝清爽.
资源:
Frails英文主页
http://frails.sf.netFrails中文主页
http://frails.hexiao.cnFrails中文论坛
http://www.hexiao.cn/jsf