概述

实际上,我是这类书籍的粉丝,因为我认为它们对初学者和经验丰富的开发者都很有用。能够快速查看所有可能的解决方案并进行原型设计总是很好的。因此,我很乐意接受 Packt 出版公司 的建议,愉快地评价 JSF 2.0 烹饪秘籍 by Anghel Leonard

最后,我已经阅读完毕,现在想分享我对它的优点和问题部分的看法。从一开始,我想快速概述一些共同点,然后通读整本书,突出我喜欢的一些配方,并针对其他配方提出一些错误修正。

优点

它的配方结构非常好!我能够直接打开任何配方,而无需阅读有关约定和环境信息的概述,只需使用配方即可!每个配方都包含所使用技术和工具的描述。它还指向包含完整应用的存档,并详细解释了关键点。书中很好地涵盖了JSF世界中的许多常见问题,大多数问题都可以通过复制书中应用示例中的代码来解决。

此外,需要强调的是,在大多数情况下,都涵盖了同一用例的实现的所有替代方案。这使用户能够选择对他来说最方便的方法!

我相信,总的来说,这本书真的很值得放在你的书架上,因为它可以回答许多常见问题,或者至少提供一些关于在哪里查找答案的提示。

一些批评

当然,总是有一些地方可以提出批评。但不要让这些批评混淆作者和计划阅读它的人。我只是想强调一些我认为对作者在未来会有所帮助,并使读者更容易解决问题的观点。

大多数示例展示了干净且有用的样本 - 但有时作者对复杂案例仅仅使用“hello world”风格,开发者可能会错过要点或低估功能的重要性。这是某些食谱的主要问题。至于完全没有代码样本的食谱(实际上很少见),我不确定是否应该包含在这样的书中。

作者在整个书中使用了JSP。然而 - 它在2.0版本中已被弃用,并在facelets出现后的1.2版本中并不流行。这当然不是一个大问题 - 但在某些情况下,一些重要信息被遗漏了。例如 - 自定义组件食谱 - 提到了TLD描述符,但没有提到组件所需的taglib。

所以让我们简要地过一遍这本书。再次强调,可能会出现的批评性词语 - 只是对读者一个提醒,让他们更加注意,对作者来说 - 考虑在未来的作品中。

过一遍

现在让我们更仔细地看看书的内容。

转换/验证章节

这两个章节都描述得很好,对于需要快速开始JSF领域的开发者来说非常有用。我最喜欢看到包含在JSF食谱中的亮点,因为它们在社区中被询问得很多 - 带参数的转换器、使用常用表达式列表的正则表达式验证、JSR 303的验证器组食谱以及从Java代码中调用验证。

一些问题
  1. 为了更好地理解 - RichFaces bean验证器食谱中@NotEmpty的情况可以稍微扩展一些信息,即通常JSF 1.2根本不验证空输入。所以需要提到,这只有在使用RichFaces框架(它提供标准输入渲染器扩展以支持null值验证)的情况下才会工作。不仅仅是说使用RichFaces J有多酷,而是确保开发者会意识到如果在没有RichFaces的情况下尝试验证,验证将不会工作。
  2. 作者没有突出BeanValidator和AjaxValidator之间的区别。它们被描述为完全相同。最重要的是应该提到,ajaxValidator - 是Ajax支持和Bean Validator的结合。

文件管理

这提供了对所有提供该主题解决方案的组件库的良好概述。所有示例都覆盖得很好,可以从样本中直接挑选用于实际应用。唯一的轻微问题是缺乏不使用任何附加库(下载、导出)的解决方案的样本。

安全

该食谱包含了JSF安全和Acegi的良好概述。但在我看来,本章缺乏一些基本信息,可以稍作扩展以包含纯JSF解决方案。

自定义组件

这是导致我最多问题的章节之一。遗憾的是,自定义组件的创建是JSF中最重要的话题之一,所以我非常关注这个章节。概述简短、非常清晰,看起来非常适合初学者入门... 然而,生命周期截图包含了一个基本的错误。“编码”和“解码”标签被放在了错误阶段,与它们应该放置的位置相反。

“EmailInput” - 并不是一个最好的自定义组件示例。正如所有经典JSF书籍资源中写的那样 - “在创建新组件之前 - 确保你不能通过某种组合达到结果”。即使考虑到作者可能想要提供一个非常简单的概述 - 问题仍然存在,那就是为什么他需要覆盖输入的渲染器方法?标准输入渲染器应该足够用,这样做可能会让开发者感到困惑,因为他可能会决定扩展组件仍然需要他每次都覆盖基本功能。

“ImageViewer”——再次,可能最好是扩展图形图像组件,而不是从头开始编写。代码看起来并不十分整洁,尤其是在添加Ajax功能的部分,新的JavaScript代码并未正常列出,而只是以转义字符串的形式包含在渲染器中。

“ProxyId库”。必须承认,我从未听说过这个有趣的扩展。但这可能是因为RichFaces已经提供了rich:clientId、rich:element、rich:findComponent和其他函数,用于对组件进行不同操作,使用它们简短的ID。这不是章节问题,而是我需要检查的笔记——作者未列出,但了解代理ID在迭代组件中是如何工作的很有趣。

“从自定义组件访问资源”。在我看来——这是该章节中最无用的食谱...我相信我们不能相信JSF初学者——仅仅通过简短的描述就能理解使用不同方法之间的区别。为了让这个章节成为食谱,它应该提供基于代码的解释。

“RichFaces CDK”。首先是一些小笔记

  • 对于那些现在才开始阅读这本书的人来说——在切换到JBoss Nexus仓库后,Maven的设置已经发生了变化。
  • 作者应明确指出,这展示了RF 3.3.3版本的CDK在实际应用中的情况。因为在4.x版本中,它已经完全重新设计,并且与旧版本不兼容。

“RichFaces CDK中的准备就绪”部分包含了关于手动创建文件夹和pom.xml的信息。然而,它可以通过CDK参考中提到的archetype来完成。“如何操作”部分——首先要求用户输入截图中的命令——看起来并不好..至少对于这个3行的命令。J该食谱的其他部分总体上解释得很好。小贴士——项目可以通过archetype轻松创建,而不是手动创建示例。

“组合组件”部分很好地解释了过程,并提供了简短但很好的示例。

“混合dojo和JSF”。总的来说——这个食谱对于需要了解如何在JSF组件中使用dojo小部件的人来说是很好的。但我对作者仅提出使用组件所需的dojo输出属性,并在示例页面中包含所有资源的事实感到困惑。这看起来像不是一个很好的可维护解决方案。

JSF中的AJAX

“DynaFaces”——这个食谱不幸地在我的看法中描述得不够好。只是“拖放一些组件,然后添加Ajax事务”——不足以理解谁需要这个食谱以及为什么需要dynaFaces。为什么它仍然有用——自描述的应用程序归档。

“Tomahawk suggestAjax”和“A4j Ajax”的食谱干净且描述良好。

“编写可重用AJAX组件”的食谱包含了一个真正奇怪的问题——在章节名称中根本没有提到AJAX。只是优化了在页面上使用多个实例的通用旋转器组件。

在我看来,该章节的主要问题——缺乏真正常见任务的食谱...例如,如何执行大型表的优化Ajax编辑,如何组织向导,如何在页面渲染后延迟加载数据等...简单的案例当然有用,因为它们展示了基础知识...但是,开发者必须在真实的企业应用程序中实现更多更复杂的问题,这些问题在各个社区论坛上不断出现。

本地化

本章涵盖了开发者可能需要的所有主要情况,食谱看起来大多数都很干净。

让我们突出一些样本。 “从类中访问消息资源”——这是一个很好的食谱,看起来很整洁,当你寻找最重要的助手类来获取本地化字符串时。这里有个小问题——它没有包含结果截图和实际属性列表——所以并不容易理解用户最终会看到什么。需要从示例档案中启动应用程序来检查。在JSF 2.0中选择时区——对读者来说是一个指出可能问题的好指南。即使没有食谱作者,至少也指向了开发者应该注意并查找更多信息的事实。显示阿拉伯字符的食谱——再次只使用JSP。但关于facelets呢?还有其他一些技巧存在,开发者需要更多这方面的知识。

JSF 图像、CSS和JS

“CSS注入”的食谱,我们真的在谈论样式吗?那么为什么我只能看到那些干巴巴的源代码,而不是至少一张创建的美丽页面的图片呢? :) 对于初学者来说,可能并不容易想象作者在那里取得了什么成果(初学者可能不知道如何应用那些属性来组件),除非再次回到示例档案。

“动态CSS”——我本以为我会看到如何在CSS样式表中使用EL :) 顺便说一句,经常被问到的一个用例可以在那里展示——使用根据行模型类型返回的样式突出显示表格单元格/行,例如重要或低优先级。但遗憾的是,那里的样本看起来更静态。

“JavaScript注入”——一个简单干净示例给了我一些如何在我的JSF中应用我的JS知识的想法。只是与JSF隐藏字段部分一起工作让我感到困惑,因为那里没有任何关于隐藏字段的内容。(实际上,我预计会有h:inputHidden的使用)“传递参数”也可以成为一个非常有用的部分——但示例缺少更多实际的使用场景。“使用JSF和JS打开弹出窗口”——看起来不错,并很好地回答了初始问题。

“rss4jsf”——感谢你的提示 :) 我错过了这个框架,现在计划查看。它看起来很干净,易于使用。“JSF 2.0中的资源”——最好有一些关于从Java对象访问的词语。但是,关于在视图中使用描述和示例看起来很干净,而且自解释。

JSF 管理和测试

JSF 单元——想强调整体描述、好的样本和常用API列表。唯一的图表使用——实际上与测试无关,总的来说,没有食谱,只是指向库网站……但这并不使整个章节变得不那么有用。

Facelets

几乎没有什么可说的——但这正是因为章节没有问题,而且写得很好 :)

只想突出“JSF 2.0的组合组件”部分。这是一个很好的样本。但主要问题——由于某种原因(似乎是因为章节名称),我期望这将专门涉及组合组件,考虑到作者提到了JSF 2.0。但实际上,它实际上是从1.2年开始的自定义标签。但当我意识到这只是一个自定义标签食谱而不是实际的组合组件时,我重新阅读了它,并想承认它在那个主题上相当不错。

“传递操作”——在那里看到真是太好了。这是Facelets 1.x中最奇怪的问题,也是那些创建自定义facelets的人最常见的问题。

JSF 2.0

又一个好而有用的章节——所以让我们来看看我想要吸引读者注意的具体样本。

为什么在2.0版本中我们需要使用Pretty Faces来创建可书签的URL?这是JSF 2.0的核心功能。这看起来好像被放在了错误的章节中。对于1.2版本来说,它是很有用的,因为当时没有内置支持GET请求。稍后我们将会找到关于JSF 2.0导航增强和视图参数使用的章节。总的来说,它们的概述写得很好。只是已经提到了一个问题——它失去了展示其酷炫功能的一些实际案例(它可以在产品列表的常见情况下——产品详情导航中使用)。

混合使用JSF和其他技术。

“Seam”。配置概述包含了设置Seam所需的所有一般指南。然而,在我看来,读者需要更多信息或真实样本来尝试Seam。哇!这是关于Seam的第一篇写稿(即使是简短的),甚至没有提到对话!:)

“混合使用JSTL和JSF”。遗憾的是,它不是关于混合,而是关于用c:forEach替换h:dataTable。而且我没有看到它的优点——为什么我应该使用它呢?

“与Hibernate集成以及Spring和JSF的混合”。我认为这种类型的内容并不适合作为菜谱。作为一个需要从真实启动样本中学习新东西的人——我仍然没有看到如何至少做一些简单的事情。所以这似乎是那一章中最有用的菜谱。

“JPA”。最后,我看到了一些示例,并且很高兴我终于可以检查如何在JSF操作中实际连接到数据库。很遗憾,登录操作没有实现,但总的来说,我理解了如何进行操作。所以这似乎是那一章中最有用的菜谱。

配置与JSF相关的技术。

缺少一些版本信息。例如,只有RichFaces 3.3及更早版本需要Filter。但总的来说,这样的章节可以快速检查使用库所需的设置,因此可能是很有用的。

结论

实际上,我的结论已经在开头写过了。我相信这本书将会在你的书架上占有一席之地,你会在需要快速实现具体案例时不时地查阅它。所列出的所有问题部分——只是作者未来改进的提示,我相信他可以成功地继续他的工作,为JSF社区的开发者创作有用的书籍。

在twitter上获取该博客的更新


返回顶部