`
javafenger
  • 浏览: 250655 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

JSF带来了什么?

阅读更多
当初看上JSF,是因为看中了几个好处:
1、获取或显示表单数据时用相同的EL即可,JSF之前的EL只能get不能set;
2、MyFaces实现里面有很多很“炫”的组件,例如下拉菜单,树型控件,日期选择控件等等,使用极其方便。
于是就在一个小项目中使用JSF开发,用着就发现其实这个东西也带来了很多比以前更麻烦的地方,就拿很常见的数据库操作——查询、修改、插入、删除来说明使用JSF来实现有什么麻烦:
1、查询。对于小数据量,用一个dataTable就什么都搞定了。可是大数据量分页就比较麻烦了,因为dataTable的分页是把所有数据都取出来然后再一页页显示,而大数据量下一般是要看哪一页就取哪一页。网上有个通用的分页存储过程,只要把一系列参数(页码,排序依据,每页大小等)传给它,就能获得某一页的数据。如果直接通过URL来传递那些参数,服务器根据参数来调用存储过程,是很方便的事情。可是JSF却不通过URL来传递参数了,整个页面处理的过程也比较复杂,没有以前那样直观。有人改了一下dataModel的实现方式,使它每次只取一页的数据,效果是达到了,但要跳到某一页,却只能点链接,不能通过输入URL来到达了(也就是不能把某一页添加到收藏夹里了)。
这两天做了一些试验,在jsf里还是可以通过URL传递参数的,在Backing Bean里可以通过ValueBinding的getValue取得URL参数,然后根据参数来从数据库中取得相应的内容,生成某个对象的bean,再在页面上显示出来。不过这样一来,似乎就跟servlet差不多了。
如果可以通过配置来设定表单提交是get方式还是post方式就好了。可是目前一律只能post,这样造成的后果除了不能收藏,不能刷新(会提示是否重新提交数据)之外,还会使浏览器的后退功能失效。

2、修改。在datatable中把数据显示出来后,可以每一行加一个commanButton,在它的action method中调用dataModel的getRowData()方法来得到该行的数据,把数据保存在一个request范围的bean里面,再转向到另一个页面通过可编辑表单来显示该bean的内容,在那里就可以修改、提交了。由于是使用了forward方式转向,所以url显示的页面还是数据显示的那个页面,只要一刷新,就又回到数据显示那一页而不是修改那一页了;如果不想修改,按一下浏览器的后退按钮,虽然回到了数据显示的那一页,但上面的commandButton已经失效,例如点击修改按钮,没有任何反应,必须把那一页刷新一下再点才有效。
为了解决这个问题,我采用了URL传递参数的方法。通过在URL中指定ID来说明要修改的是哪个对象,在修改页面的backing bean的构造函数中,读取URL参数来获得ID,然后通过查询数据库得到该对象的其他内容,再显示在页面上。这样就可以刷新,可以后退。

3、新增。新增跟修改可以用同一个页面来显示,只是commandButton对应不同的action method,例如“修改”按钮对应的是update,“新增”按钮对应的是create,在两个method里分别使用数据库的update语句和insert语句即可。新增的时候是没有ID的,修改的时候则已经有了ID。

4、删除。在显示数据的dataTable里,每行可以添加一个commandButton,在它的action method里,读取该行数据,得到ID后执行SQL的DELETE语句即可,比较简单。

无论是做什么,都离不开三个东西:页面,配置文件,Backing Bean。页面是表现层的东西,负责把页面上的东西与Backing Bean联系起来。配置文件则指定在页面上使用的Backing Bean的名字、类、使用范围,还有导航规则(Navigation Rules)。Backing Bean就是程序的逻辑部分了。即使实现最简单的功能,例如显示某个变量的值,这三个东西都是必不可少的。
修改页面的时候,虽然不用重启服务器,但必须在新的session里才能看出效果来,最简单的办法就是把浏览器关掉,打开一个新的,查看结果。修改了配置文件和backing bean 就必须重启服务器了。所以调试JSF是很麻烦的。  

分享到:
评论

相关推荐

    开发JSF所需要的jar包

    类似的还有RichFaces、IceFaces等,它们为JSF带来了更丰富的用户界面元素。 7. **CDI (Contexts and Dependency Injection)**: CDI(如`javax.enterprise.cdi-api.jar`和`weld-servlet.jar`)是Java EE中的依赖...

    jsf+facelets+ajax4jsf的全部jar包

    5. **整合使用**:将这些jar包整合到一个项目中,开发者可以构建出既有JSF的强大组件模型,又有Facelets的清晰视图结构,还能享受到Ajax4jsf带来的交互性提升。通常,这需要在项目的类路径中添加相应的jar,配置web....

    JSF实战 练习 开发

    综上所述,JSF不仅为Web开发带来了便利,而且通过其强大的组件架构和应用基础设施,使得开发者能够构建出高质量的Web应用程序。无论是对于初学者还是经验丰富的开发者而言,掌握JSF都将是一个有益的投资。通过不断...

    JSF 一些经验 .doc

    通过结合使用这些技术,开发者可以在一定程度上缓解 `dataTable` 组件所带来的问题。 #### 四、模型 Bean 与业务 Bean 的整合 在 JSF 应用中,将模型 Bean 与后台业务 Bean 合并可以提高开发效率。这种做法允许在...

    jsf1.2源代码下载

    JSF 1.2是该框架的一个重要版本,发布于2007年,带来了许多增强功能和改进,提升了开发者的体验和应用的性能。本篇文章将深入探讨JSF 1.2的源代码,以及如何使用MyEclipse进行关联和查看源码。 1. **JSF 1.2 的核心...

    JSF2.0源代码

    JSF 2.0是该框架的一个重要版本,它带来了许多改进和新特性,提升了开发者的体验和应用性能。在本文中,我们将深入探讨JSF 2.0的源代码,特别是mojarra实现,这是JSF规范的主要参考实现。 **一、Mojarra:JSF的核心...

    jsf+spring整合

    整合JSF和Spring可以带来高效的开发体验和健壮的应用架构,但同时也需要开发者对两个框架都有深入的理解,才能充分发挥其潜力。在实际项目中,应根据具体需求选择合适的技术栈,并遵循最佳实践,以保证项目的稳定性...

    JSF and MyFaces 类库

    JavaScript Server Faces(JSF)...在Eclipse中开发JSF和MyFaces类库,可以享受到IDE带来的便利性,同时充分利用JSF和MyFaces的丰富功能和灵活性。通过熟练掌握这些知识点,你将能够高效地开发出高质量的Java Web应用。

    jboss-ajax4jsf-1.1.1-src

    【标题】"jboss-ajax4jsf-1.1.1-src" 是一...此外,通过运行示例或测试代码,开发者能够快速上手并体验Ajax4jsf带来的优势。最后,根据项目的实际需求,开发者可以自定义或扩展Ajax4jsf的功能,以满足特定的应用场景。

    ajax4jsf使用中文手册

    这使得开发者可以选择最适合他们需求的组件集,同时享受Ajax4JSF带来的便利。 ### 6. Ajax4JSF的行为和事件 Ajax4JSF的行为(Behaviors)定义了如何响应用户事件,而事件(Events)则是行为触发的结果。例如,`a4j...

    JSF2 规范的标准参考实现

    JSF 2是该框架的一个重大更新,带来了许多增强功能和改进,旨在提高开发效率、可维护性和用户体验。在给定的压缩包中,包含的`jsf-api.jar`和`jsf-impl.jar`是JSF 2规范的官方参考实现,由Mojarra项目提供,这是...

    JSF2开发代码示例

    JSF2.2是该框架的一个重要版本,带来了许多增强功能和改进,使得开发者能够更加高效地进行Web应用开发。在这个"JSF2开发代码示例"中,我们将深入探讨JSF2.2的核心特性,特别是与AJAX和PrimeFaces组件库相关的部分。 ...

    JSF入门PDF书籍

    ### JSF入门知识点详解 #### 一、JSF概述与入门 **1.1 JSF简介** - **背景与挑战**: - Web应用程序开发相较于传统单机程序开发,在技术层面上面临着诸多挑战,比如HTTP协议的状态无感知特性、多用户并发访问带来...

    JSF in Action英文版(含源代码)

    从JSF 1.x到JSF 2.x,再到现在的JSF 3.x,每个新版本都带来了改进和新特性。例如,JSF 2.x引入了更多的注解驱动开发,JSF 3.x则加强了对现代Web标准的支持。 通过阅读《JSF in Action》并研究提供的源代码,开发者...

    JSF教程入门

    - **2.1 BackingBeans**:了解什么是BackingBeans以及它们在JSF应用中的作用。 - **2.2 Beans的配置与设定**:深入探讨如何配置和管理ManagedBeans,包括生命周期管理、依赖注入等方面的知识。 - **2.3 Beans上的...

    jsf2

    JSF 2.0是该框架的一个重要版本更新,带来了许多改进和新特性,极大地提升了开发效率和用户体验。在本文中,我们将深入探讨JSF 2.0的核心概念、主要特点以及如何利用这些特性来创建高效的应用程序。 ### JSF 2.0...

    JSF2入门视频+源代码教程

    JSF2是其第二个主要版本,带来了许多增强功能和改进,使得开发更加高效和易用。这个"JSF2入门视频+源代码教程"是一个适合初学者的资源包,它包含了一系列的视频教程和配套的源代码,旨在帮助用户快速理解和掌握JSF2...

    JSF实现的文件上传

    文件上传功能可能会带来安全风险,比如恶意文件上传。因此,确保对上传的文件进行严格的验证和过滤,包括但不限于: - 检查文件类型和扩展名。 - 限制文件大小,防止DoS攻击。 - 对上传的文件路径进行编码,防止路径...

    jsf,spring酒店预定管理系统

    JSF和Spring的整合可以带来更多的便利。Spring可以作为JSF的后台服务层,处理业务逻辑和数据操作。通过使用Spring MVC,我们可以将JSF的视图层与Spring的控制层紧密结合,实现更高效的开发流程。此外,Spring ...

    JSF2.0实战 - 6、TextBox

    JSF(JavaServer Faces)是Oracle公司提供的一个用于构建Web应用程序的MVC框架,而JSF 2.0版本带来了许多改进和新特性,使开发更加简便高效。 首先,TextBox在JSF中被称为`h:inputText`,它是一个用于收集用户单行...

Global site tag (gtag.js) - Google Analytics