`

JSF 与 Struct的区别

阅读更多
据说JSF的主要负责人就是 struts的主要作者,所以二者的相似点还是有很多的。 
都采用taglib来处理表示层:在jsp页面中,二者都是采用一套标记库来处理页面的表示和model层的交互。 
二者都采用了bean来作为和jsp页面对应的model层。该model层保存了jsp页面上的数据,同时可以作一些验证工作,在struts中就是FormBean,在JSF中就是back bean。 
都 采用bean作为控制层,Struts中采用ActionBean来处理业务逻辑,对于简单的应用可以直接在ActionBean中编写业务逻辑代码,也可以调用另外的bean或者EJB来处理业务逻辑;对于JSF则采用backing bean来处理业务逻辑,同样,backing bean也可以直接编写业务逻辑或者调用其他的bean来处理业务逻辑。 
都采用xml配置文件来处理bean的配置,页面导航等问题,增加了系统的灵活性。 
都采用资源文件来处理国际化和本地化的问题。 
然而,二者的不同点也很多,下面分别说明: 
首 先二者的侧重点不同,Struts侧重于控制层,侧重于如何分派和处理用户的请求,所以表示层的taglib功能不够强大。而JSF则侧重于表示层,实现 了大量的标准组件,允许开发人员对表示层有更多的控制权,同时JSF实现了一个开放的架构,允许开发人员创建自己的组件,或者在现有的组件上继承,开发功 能更强大的组件。本人认为这是JSF最大的一个特色。(有点类似于vcl和.net组件) 
和jsp 对应的model层,在Struts中采用FormBean来保存用户输入的数据,基本上一般字段的类型都是String。而且可以进行简单的验证,当然 如果采用动态的FormBean就不能在FormBean中进行验证了。在Struts中,jsp和FormBean是紧密结合在一起的,只要写一个 jsp就必须对应一个FormBean,同时jsp上的每个组件都对应FormBean中相同名字的字段。本人认为这里不太灵活,比如,开发页面的时候就必须考虑后台的FormBean的实现,但此时如果该页面没有FormBean的化则程序运行时会出错。在JSF中,JSP页面中的组件通过value属性和backing bean的字段关联,这样就有比较大的灵活性,页面上的每个组件可以对应相同的backing bean,也可以对应不同的backing bean(当然本人认为在一般的应用中,一个页面上的组件还是都对应到一个backing bean较好),而且在设计页面的时候可以不考虑backing bean如何设计,可以在设计完页面之后再考虑backing bean的实现问题。 
关于数据验证,Struts可以采用在FormBean中的验证函数中进行验证,也可以使用validator进行验证(关于这种验证方法,本人没有测试过,不知效果如何,希望有经验的朋友指教!)。在JSF中,提供了一些标 准的validator。可以对输入的数据做一些简单的验证,例如验证数值数据的范围,字段是否必填等。但其验证的反馈信息为英文。如果该信息不能自定义的化,那么针对国内的应用就不太适合了,目前本人还没有找到该反馈信息是否能够自定义的办法。另外对于input类型的组件可以通过validator属 性关联到backing bean的一个验证方法上。在事件处理方法中进行验证也是一个办法。 
在JSF中还有一个问题就是在JSF生成的页面 中,组件的Id命名比较怪异,所有的组件的id都类似于“form:compnentid”即form的名称+“:” +组件的id。这样通过javascript访问组件就不是很方便,通过form.id形式好像不能访问到组件。不知道各位有没有好的解决方案。                                                                          
控制层:Struts 中通过form的action来提交请求,通过ActionServlet来分发请求,最后由ActionBean来处理请求,在Action中实现业务 逻辑或者调用其他的业务逻辑bean来完成用户的请求并返回客户端。在这里,一个form只有一个action,即一个页面只能提交到一个action Bean。对于页面上有多个按钮都需要提交的情况就需要使用一些变通的方法了。和传统的web开发的模式比较接近。 
对于JSF,采用了事件模 式来处理用户提交的请求。JSF实现了事件监听器来监测事件,例如当用户单击了一个按钮就会触发一个按钮单击事件,还有valuechange事件监听器 来监测数值改变的事件等。例如在页面中通过通过CommandButton按钮的action属性来关联到backing bean的方法来执行相应的操作。 每个不同的按钮都可以关联不同的方法,当然也可以关联相同的方法(这样就和Action Bean非常类似了)。这中开发模式比较接近于传统的c/s模式或者Asp.net的开发模式。对于那些从c/s架构程序或者Asp.net架构转过来的 开发者来说,这种方式可能更自然一些。 
在JSF的一些简单的示例程序中,通常把和jsp对应的model层和jsp所提交的action放在同一个backing bean中,即业务逻辑和业务逻辑所处理的数据在同一个bean中。本人认为,这样的结构只能用在简单的应用中,对于企业级的开发并不适合。应该将页面所关联的数据和页面所做的action分开,这样的结构更好一些,比较类似于struts的结构。 
JSF的backing bean中的方法访问session,request等没有struts中的直观。笔者找了很多例子才知道如何访问session中的数据。 
页 面的导航:关于页面的导航,struts和JSF比较类似。都是在xml的配置文件中配置导航规则。每个要跳转的页面都有一个别名,在程序中通过别名进行 跳转。另外Struts中的跳转是在ActionBean中发生,execute方法最后返回一个actionForward来进行跳转。而JSF则在事 件处理方法中最后返回一个字符串,由系统在xml文件中匹配自动进行跳转。在JSF中也可以通过在JSP页面的CommandButton的action 属性中直接填写跳转的别名直接跳转,而不必经过事件处理方法的处理。 
资 源文件的管理:Struts和JSF对于资源文件的管理比较类似,Struts中在struts-config.xml中对资源文件进行配置,实现整个程序的统一管理。而对于JSF则可以在每个JSP页面中分别定义资源文件,然后通过资源文件的别名来访问资源文件中的内容。两者的格式也不相同,在 Struts中,格式为: grade1.grade2.grade3 = your information,通过“.”来表示级别。而在JSF中则必须通过下划线来表示级别,例如grade1_grade2_grade3= your information。本人认为还是struts的方案更直观一些。另外在Struts的资源文件中可以定义信息的显示格式,例如: error.header,error.footer。而JSF中如何定义还不太清楚,或者可以通过定义Messages标记的属性来定义。  

 

 

分享到:
评论

相关推荐

    基于JSF+EJB和EJB+Struct的开发例子

    【标题】基于JSF+EJB和EJB+Struct的开发例子 在软件开发领域,Java Server Faces (JSF)、Enterprise JavaBeans (EJB) 和 Struts 是三种重要的技术,常用于构建企业级的Web应用程序。这个开发例子展示了如何将它们...

    JSF与hibernate整合的登陆

    **JSF与Hibernate整合** 的目的是将JSF的UI处理能力与Hibernate的数据访问能力结合起来,创建出既具有良好用户体验又能够高效处理数据的Web应用。在本项目中,“JSF与Hibernate整合的登陆”可能涉及到以下关键知识点...

    jsf入门列子和jsf与Tiles结合

    总结来说,这个例子涵盖了JSF的基本用法,包括Bean的创建、验证逻辑的实现、导航规则的配置,以及JSF与Tiles的初步集成。对于初学者,这是一个很好的起点,能帮助理解JSF如何处理用户交互、管理页面流程,以及如何与...

    jsf实例jsf实例 JSF学习 JSF jar包 JSF

    jsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSFjsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSF

    JSF与Spring完美结合

    2. **配置JSF**:为了使JSF能够与Spring协作,需要在JSF的配置文件(如`faces-config.xml`)中添加Spring的JSF监听器`org.springframework.web.jsf.FacesContextListener`,这样JSF就能识别到Spring的Bean。...

    JSF Java Server Faces (JSF)框架

    JSF是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。JSF(Java Server Faces)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标签库。就像Struts框架...

    JSF 核心编程与入门

    JSF的核心思想是将用户界面与业务逻辑分离,通过声明式的方式管理UI组件和数据绑定。 **2. JSF组件模型** JSF中的组件是构建用户界面的基本元素,它们可以是简单的HTML标签,也可以是复杂的自定义组件。每个组件都...

    JSF中文教程jsf

    **数据绑定** 是JSF的一个关键特性,它将组件的值与后台bean的属性直接关联。这使得界面的更改能够直接影响到模型,反之亦然。**Managed Beans** 是JSF中的业务逻辑载体,它们负责处理应用的业务规则和数据管理。 *...

    JSF与Facelets应用程序

    综上所述,JSF与Facelets的结合提供了强大的Web应用开发工具集,它简化了视图的创建和维护,同时保持了与后端业务逻辑的紧密集成。通过使用这个框架,开发者可以专注于业务逻辑的实现,而不需要过多关注底层的HTTP...

    JSF的工作方式 JSF架构 JSF模型 JSF事件类型

    如果存在,JSF会恢复这个视图,即重新构建组件树,确保服务器端的组件状态与上次用户交互时一致。 2. **应用请求值(Apply Request Values)**:接着,JSF从请求参数、HTTP头和Cookie中提取数据,并将这些值分配给...

    jsf第一个例子 jsf架包 jsf实例

    它们与JSF页面通过EL(Expression Language)进行交互。 5. **EL(Expression Language)**:EL是用于获取和设置Managed Beans属性的简洁语法,常用于JSF页面中绑定组件的值。 6. **jsf架包**:JSF相关的库通常被...

    JSF入门+JSF web实战+JSF2

    JavaServer Faces(JSF)是Java平台上的一种用于构建Web应用程序的MVC(Model-View-Controller)框架。它提供了一种声明式的方式来构建用户界面,简化了开发过程,并且与Java EE平台无缝集成。本系列资料包括《JSF...

    JSF包,jsf包,JSF包,jsf包

    2. **集成性**:JSF与EJB、JPA等Java EE技术紧密集成,便于构建企业级应用。 3. **可扩展性**:开发者可以创建自定义组件,扩展框架功能。 4. **MVC架构**:JSF遵循MVC模式,有助于分离关注点,提高代码可维护性。 5...

    《JSF_实战》非常好的JSF学习书

    《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF...

    JSF上传 JSF大文件上传 JSF上传代码 JSF上传源代码

    JSF(JavaServer Faces)是Java平台上用于构建用户界面的Web框架,尤其在处理表单和数据交互方面表现强大。本项目聚焦于JSF的文件上传功能,特别是针对大文件的上传,允许用户上传最大可达1.99GB的文件。在实际应用...

    jsf分页 jsf分页 jsf分页

    在JavaServer Faces (JSF)框架中,分页是一种常用的技术,用于处理大量数据时提供更好的用户体验。当数据集过大,一次性加载所有记录到页面上会导致性能下降且用户界面响应变慢。通过分页,我们可以将数据分成多个...

    core jsf 1.2 jsf 核心

    JSF使用Expression Language (EL) 来实现视图层与模型层的数据绑定。EL表达式,如`${bean.property}`,可以轻松地访问 Managed Bean 中的属性。JSF 1.2增强了EL的表达能力,支持更多的操作符和上下文变量。 ### 4. ...

    JSF文件下载实现

    7. **JSF与JSP的集成**: 在JSF页面中,可以利用`<h:outputLink>`组件结合JSP页面来实现文件下载。`<h:outputLink>`的`value`属性指向JSP页面,通过传递参数(如`filename`)来指定要下载的文件。JSP页面接收这些...

Global site tag (gtag.js) - Google Analytics