写点什么

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