OmniFaces:针对 Java Server Faces 的工具库

阅读数:1268 2012 年 8 月 19 日 22:41

OmniFaces 是一套工具库,试图让针对企业应用程序的 JSF 开发更轻松。它是由 Bauke Scholtz (也就是 BalusC )和 Arjan Tijms 创建的。他们都经常在知名的 Stack Overflow Q/A 网站上做出贡献,从 Stack Overflow 的问题中,他们发现了一些常见的 JSF 2.x 问题,之后就实现了 OmniFaces。尽管名字叫做 OmniFaces,但它并不是另一种 JSF 的实现。相反,它使用多种辅助程序和针对特定问题的解决方案补充了现存的 JSF 类库。案例展示实际上是基于 PrimeFaces 的。

OmniFaces 库对很多特性都做了扩展,包括:

  • 突出显示没有通过验证的字段
  • 将常量值导入到 EL 范围内。
  • 自动把模型对象转换到下拉框和其他选择组件中。
  • 多字段的验证器,它针对“所有或没有(all or none)”、“全部相等(all equal)”、“一个或多个(one or more)”、“全部按顺序排列(all in order)”和“唯一(unique)”的验证器。
  • HTML5 渲染工具,它向 UIForm 和 UIInput 组件增加了对多种 HTML5 专用的属性的支持。
  • 完整的Ajax 异常处理程序。
  • 每个级别都带有完整自定义标记的树状结构(对各种递归情况很有用)。
  • 针对 EL 函数的集合,用来处理数组、转换、日期和字符串。
  • 针对 HTTP 响应的 GZIP 压缩过滤器。
  • 在 Facelets 中包含 Servlets 和 JSP 页面。

InfoQ 联系了 OmniFaces 的作者,请他澄清一些问题,首先我们谈论了创建这个类库的原因。他们指出,JSF 缺少 Apache Commons Guava 的等价类库,从而”所有公司或者 JSF Web 应用程序的开发者都会开发自己的系列工具,当第一次做的时候会耗费大量时间,并且易于出错。“ 他们还指出,在 JSP 应用程序中有大量经常发生的问题,像“在 Ajax 更新之前重置不可用但没有处理的输入组件,或者拥有完整的能够感知 Ajax 的、使用标准的 web.xml 错误页面机制的异常处理程序,以及下拉项目所需要的通用转换器”,这些在 OmniFaces 库中都有提供。

由于现在已经有大量 JSF 类库,包括 PrimeFaces RichFaces ICEFaces 等,接下来我们将 OmniFaces 与它们进行一下比较。

OmniFaces 没有提供任何带有自定义渲染器的可视化组件(从而可以通过生成的 CSS/JS 达到很炫的感观和改善的行为)。OmniFaces 没有创建新的组件和 TagHandler,而是改善了现存的核心 JSF 组件和 TagHandler,像 f:viewParam、f:converter、f:validator、h:form 和 h:outputLabel。

除了组件和 TagHandler,OmniFaces 还提供了大量可重用的工具,让 JSF 开发更轻松,而不需要重新造轮子。以上提到的任何一种类库都没有提供这种特性。

所以,尽管 PrimeFaces、RichFaces 和 ICEFaces 看起来主要是专注于可视化组件(widgets),但 OmniFaces 更多关注于工具和 JSF 中的缺点和问题。你可能会说那三种都是 JSF 组件库,而 OmniFaces 是 JSF 的工具库。

InfoQ: 你能改善一种现存的 JSF 框架,而不是创建新的框架吗?

理论上我们可以,但是我们不喜欢那样做。我们想要创建一套工具库,可以为所有 JSF 的 Web 应用程序所用。然而,我们对 ResetInputAjaxActionListener 做了一些特别针对 RichFaces 的周边工作,因为在 RichFaces 对 PartialViewContext 的实现中有未解决的缺陷。

InfoQ: 你们在 Stack Overflow 看到了哪些重复出现的问题?

其中的一些问题包括:需要没有标签的树组件(makeup-less tree component);使用 IE 条件注释的笨拙方法;需要 f:selectItems 转换器,它会对提供的条目进行转换,而不是做昂贵的 DAO 调用;需要重置输入的字段,它在上一次 Ajax 请求中没有通过验证,但是需要在当前的 Ajax 请求中更新;能够感知 Ajax 的错误处理程序。其中几乎什么都有。

现在,我们的路线图很大程度上是由我们看到人们在使用 JSF 时所遇到的问题来决定的。这意味着我们不会坐下来,然后为我们认为很棒的东西做计划,而是对现实中的问题做出响应。这种工作方式不是固定的,我们可能会在认为必要的时候引入一些特性,但是现在几乎都是在解决人们的问题。

InfoQ: 还有什么想要和 InofQ 读者说的吗?

我们可能需要强调的一点是,我们并不想要成为 PrimeFaces(和 RichFaces)的竞争对手。相反,我们都是 PrimeFaces 的铁杆粉丝,并且在参与的商业应用程序中每天都在使用。我们使用 PrimeFaces 构建了 OmniFaces 的演示应用程序,并且清楚地提到这一点,这已经足够说明上面的说法了。

OmniFaces 最近发布了 1.0 版本 (在 Maven 中还没有提供 1.1 版本的更新)。 想要了解更多信息,你可以参见博客 Javadoc 以及标签库信息

查看英文原文: OmniFaces:A Utility Library for Java Server Faces

收藏

评论

微博

用户头像
发表评论

注册/登录 InfoQ 发表评论