写点什么

OmniFaces:针对 Java Server Faces 的工具库

2012 年 8 月 19 日

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

2012 年 8 月 19 日 22:411359
用户头像

发布了 340 篇内容, 共 111.4 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

极客大学架构师训练营 - 通达物流系统架构设计

张磊

架构师训练营第一周学习总结

Gosling

极客大学架构师训练营

架构师训练营-第一周作业

chenlovehx

同城快递(快飞)系统概要设计

dony.zhang

架构设计 概要设计

期末作业

慵秋

架构训练营-week1-学习总结

于成龙

极客时间 架构 UML

架构师训练营 - 第一周学习总结

chenlovehx

Architecture Phase I-Week1 Homework summarize

phylony-lu

极客大学架构师训练营

架构训练营第一期作业

Geek_ce484f

极客大学架构师训练营

架构师训练营 大作业(一)

陆不得

【架构师训练营】大作业二

花生无翼

一键前往未来成都?鲲鹏快线好巴适!

脑极体

15周作业一

熊威

第一周 架构方法学习总结

钟杰

极客大学架构师训练营

食堂就餐卡系统设计

泡泡

《冻结的希望》中的人体冷冻技术,能够打开永生的魔盒吗?

脑极体

架构师训练营大作业

刘璐

极客大学架构师训练营 - 架构师技术图谱

张磊

大作业-同城物流系统设计文档

刘敏

架构师能力,你掌握了吗?

阿飞

架构师

Flutter 性能优化之Isolates

Daniel

第一周 架构方法-作业-食堂就餐卡系统

刘希文

JDK 15已发布,你所要知道的都在这里!

Yano

「Java 25周年」 JDK15

架构师训练营1期--第一周

小河

极客大学架构师训练营

字节为提升员工工作效率,竟强制学习SpringBoot实战派

周老师

Java 编程 程序员 架构 面试

UML练习1

何毅曦

学习

架构训练营-week1-作业1

于成龙

架构 UML

vue大型项目高性能优化----想说爱你真的不容易

云流

学习 编程 程序员 架构师

周总结一

何毅曦

架构师大作业一

stardust20

架构师训练营 大作业(二)

陆不得

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

OmniFaces:针对Java Server Faces的工具库-InfoQ