公司动态
当前位置:首页 > 公司动态 > 学术交流 > 使用JSF框架心得

      我目前的项目前端使用的是jsf的架构,目前项目已经进入尾声,我想把一些心得体会给大家说说,以便大家在使用jsf的时候,少走弯路。

       JSF的用户界面组件模型由UI组件类、显示模型、事件模型、数据置换模型以及数据验证模型组成。

       UI组件类:与其他专有技术(如 ASP.Net)有点类似,JSF 的 UI 组件模型技术使开发人员能够使用预先构建的用户界面 (UI) 组件来构建 Web 用户界面(而非完全从头构建用户界面),从而提供了前所未有的开发效率。JSF UI 组件有多种形式,可以简单到只是显示文本的 outputLabel,或者复杂到可以表示来自数据集合(如数据库表)的表格化数据的 dataTable。

 

       细心的使用dataTable组件,数据列表是最常用的页面组件,但是jsf的dataTable组件的实现过于简单,没有很方便的解决特定行样式显示的问题,回退按钮存在风险,没有dataScroll和dataTable组件进行数据库分页的优雅办法,我的开发很多时间用在了dataTable的和其他组件块融合上面。网上有很多教程上都写出dataTable的使用方式过于单一,基本都是<h:dataTable value="#{ManagedBean.方法名}" var="u">后台方法命名是get加上自己起的名字,但是在前台把get取消掉并把大写换小写就可以直接调用了。在使用dataTable时发现使用上述方法加载数据时不可以带参数,如果强制带参会无法执行,其实很简单的这样使用<h:dataTable value="#{ ManagedBean.方法名(user.pageNo)}" var="u">注意这个方法名必须与后台方法名完全一致并在后面加上要传的参数。可以把jsf的模型bean和后台的业务bean合二为一,这样在前端提交页面与模型绑定的同时,完成业务bean的数据封装,并且交由服务层处理一气呵成,因为jsf的页面绑定机制提供了很好的帮助。

       善用@ManagedBean的作用域范围

       @RequestScoped bean只要HTTP请求响应就行。它根据HTTP请求创建,并在与HTTP请求相关联的HTTP响应完成时被销毁。

       @NoneScoped bean与单个表达式语言(EL)求值时间一样长。 在EL求值评估时创建,并在EL求值评估后被销毁。

       @ViewScoped bean只要用户在浏览器窗口中与同一JSF视图进行交互即可。 它根据HTTP请求创建,并在用户导航到其他视图时被销毁。

       @SessionScoped bean只要HTTP会话生存。 它在第一个HTTP请求时创建,并在HTTP会话无效时被销毁。

       @ApplicationScoped bean只要Web应用程序生存。 它在第一个HTTP请求或Web应用程序启动时创建,并且在@ManagedBean中设置属性eager = true,并在Web应用程序关闭时被销毁

       @CustomScoped bean只要在为此范围创建的自定义Map中的bean的条目生效。

        分页问题:在百度和谷歌上搜索了大量JSF的分页解决方案,但是感觉都过于臃肿复杂

        XHTML与HTML的不同之处在于,XHTML 元素必须被正确地嵌套。XHTML 元素必须被关闭。标签名必须用小写字母。XHTML 文档必须拥有根元素。<html> 必须是root元素   <head>和<body> 是 <html>中一定有且只有的元素   <head> 必须有 <title>, <meta>和<style>可选, 他们只能在<head>里   <body> 里只能有 block元素   block元素不能放在inline元素里   block元素不能放在<p>里   <ul>和<ol>中只能有<li>元素,但<li>里可以放其他,包括block元素   <blockquote>中只能放block

 

       JSF 的主要优势之一就是它既是 Java Web 应用程序的用户界面标准又是严格遵循模型-视图-控制器 (MVC) 设计模式的框架。用户界面代码(视图)与应用程序数据和逻辑(模型)的清晰分离使 JSF 应用程序更易于管理。为了准备提供页面对应用程序数据访问的 JSF 上下文和防止对页面未授权或不正确的访问,所有与应用程序的用户交互均由一个前端FacesServlet(控制器)来处理。

 

       JSF常用来和struts对比,struts是一种MVC框架,JSF是一种事件驱动的框架。SF依赖JSF核心包,JSTL及apache常用的commons类

您总共需要以下的jar文件:

1)   jsf-api.jar :定义于JSF规范中的JSF API类。

2)   jsf-impl.jar :特定实现的JSF类(不同的实现组织,包名可能不同)。

3)   rcommons-digester.jar :解析xml文件的类。

4)   commons-collections.jar :提供了基于Java Collection类创建的各种类。

5)   commons-beanutils.jar :定义和访问JavaBean组件属性的应用工具。

6)   commons-logging.jar :日志工具。

7)   jstl.jar :JSTL API类。

8)   standard.jar :JSTL 的实现类。

 

      受管Bean充当控制器的角色:通常它包含想要从用户处收集的属性,以及处理这些属性、操纵UI和执行其他一些应用处理的监听器方法。即它接收用户提交的数据,然后调用相应的模型的业务方法来处理用户的请求。

组件显示模型:组件的功能通常围绕着两个动作:解码和编码数据。解码是把进入的请求参数转换成组件的值的过程。编码是把组件的当前值转换成对应的标签(也就是HTML)的过程。

组件显示功能有两种工作实现方式:

直接实现:组件自己实现解码和编码。

委托实现:组件委托呈现器进行解码和编码。

 

     总结

     JSF框架是一个与众不同的框架,提供了一个定义良好的编程模型,由丰富的API和标签库组成,结合html标准标签,可以更方便的提供服务器端验证、数据转换、定义页面导航、提供可扩展性、提供国际化支持、可访问性等。借助这些功能和工具,我们可以更加轻松的创建服务器端的用户界面。

 

版权归威海众成信息科技股份有限公司所有,转载请注明出处。