OmniFaces:针对Java Server Faces的工具库

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

你可能感兴趣的:(OmniFaces:针对Java Server Faces的工具库)