`
hanxinyu
  • 浏览: 125275 次
  • 来自: henan china
社区版块
存档分类
最新评论

Java Server Faces 框架

    博客分类:
  • jsf
阅读更多
Web应用程序的开发与传统的单机程序开发在本质上存在着太多的差异,Web应用程序开发人员至今不可避免的必须处理HTTP的细节,而HTTP无状态的(stateless)本质,与传统应用程序必须维持程序运行过程中的信息有明显的违背,再则Web应用程序面对网站上不同的使用者同时的存取,其线程安全问题以及数据验证、转换处理等问题,又是复杂且难以解决的。
  另一方面,本质上是静态的HTML与本质上是动态的应用程序又是一项违背,这造成不可避免的,处理网页设计的美术人员与程序设计人员,必须被彼此加入至视图组件中的逻辑互相干扰,即便一些视图呈现逻辑以Tag的方式呈现,试图展现对网页设计美术人员的亲切,但它终究必须牵涉到相关的流程逻辑。
  有很多方案试着解决种种的困境,而各自的着眼点各不相同,有的从程序设计人员的角度来解决,有的从网页设计人员的角度来解决,各种的框架被提出,所造成的是各种不统一的标签与框架,为了促进产能的整合开发环境(IDE)难以整合这些标签与框架,另一方面,开发人员的学习负担也不断的加重,他们必须一人了解多个角色的工作。
  JavaServer Faces  的提出在试图解决这个问题,它试图在不同的角度上提供网页设计人员、应用程序设计人员、组件开发人员解决方案,让不同技术的人员可以彼此合作又不互相干扰,它综合了各家厂商现有的技术特点,由Java Community Process(JCP)团队研拟出来的一套标准,并在2004年三月发表了JavaServer Faces 1.0实作成果。
  从网页设计人员的角度来看,JavaServer Faces提供了一套像是新版本的HTML标签,但它不是静态的,而是动态的,可以与后端的动态程序结合,但网页设计人员不需要理会后端的动态部份,网页设计人员甚至不太需要接触JSTL这类的Tag,也可以动态的展现数据(像是动态的查询表格内容),JavaServer Faces提供标准的标签,这可以与网页编辑程序结合在一起,另一方面,JavaServer Faces也允许您自订标签。
  从应用程序设计人员的角度来看,JavaServer Faces提供一个与传统应用程序开发相类似的模型(当然因某些本质上的差异,模型还是稍有不同),他们可以基于事件驱动来开发程序,不必关切HTTP的处理细节,如果必须处理一些视觉组件的属性的话,他们也可以直接在整合开发环境上拖拉这些组件,点选设定组件的属性,JavaServer Faces甚至还为应用程序设计人员处理了对象与字符串(HTTP传送本质上就是字符串)间不匹配的转换问题。
  从UI组件开发人员的角度来看,他们可以设计通用的UI组件,让应用程序的开发产能提高,就如同在设计Swing组件等,UI开发人员可以独立开发,只要定义好相关的属性选项来调整细节,而不用受到网页设计人员或应用程序设计人员的干扰。
  三个角色的知识领域原则上可以互不干扰,根据您的角色,您只要了解其中一个知识领域,就可以运用JavaServer Faces,其它角色的知识领域您可以不用了解太多细节。
  要使用JSF,首先您要先取得JavaServer Faces参考实作(JavaServer Faces Reference Implementation),在将来,JSF会与Container整合在一起,届时您只要下载支持的Container,就可以使用JSF的功能。
请至 JSF 官方网站的 下载区  下载参考实作,在下载压缩档并解压缩之后,将其 lib 目录下的 jar 档案复制至您的Web应用程序的/WEB-INF/lib目录下,另外您还需要 jstl.jar 与 standard.jar 档案,这些档案您可以在 sample 目录下,解压缩当中的一个范例,在它的/WEB-INF/lib目录下找到,将之一并复制至您的Web应用程序的/WEB-INF/lib目录下,您总共需要以下的档案:

    * jsf-impl.jar
* jsf-api.jar
* commons-digester.jar
    * commons-collections.jar
    * commons-beanutils.jar
* jstl.jar
* standard.jar
   
Web应用程序的web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <description>
        JSF Demo
    </description>
    <display-name>JSF Demo</display-name>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>
            javax.faces.webapp.FacesServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
  
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.faces</url-pattern>
    </servlet-mapping>
  
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>
在上面的定义中,我们将所有.faces的请求交由FaceServlet来处理,FaceServlet会唤起相对的.jsp网页,例如请求是/index.faces的话,则实际上会唤起/index.jsp网页。

JSF的实现思想来源于.NET平台的ASP.NET,组件化的设计以及事件驱动模型是它们的特点,对于开发人员,我们可以想象Swing or SWT的开发。即JSP是UI的展现,那么UI的控制代码则交给后台的一个UI Bean进行处理,在这个UI Bean中包含了页面组件的事件(一个button的click事件等等)以及其它的控制部分。


 一个简单的示例

index.jsp
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
  <html>
<head>
<title>第一个JSF </title>
</head>
<body>
    <f:view>
        <h:form>
            <h3>请输入您的名称</h3>
            名称: <h:inputText value="#{user.name}"/><p>
            <h:commandButton value="确定" action="login"/>
        </h:form>
    </f:view>
</body>
</html>

JSP中的f、h两组标签库是JSF的标准标签库,分别代表JSF HTML 和 JSF CORE,注意#{user.name},#代表JSF的表达式语言,而user.name表示,user是UI Bean(managed bean),name是这个bean的一个属性,由提供的get方法获取值。我们可以从下面的代码看到,UI Bean是一个POJO的,而不象Struts需要继承Struts本身的父类。

package onlyfun.caterpillar;

public class UserBean {
    private String name;
  
    public void setName(String name) {
        this.name = name;
    }
  
    public String getName() {
        return name;
}

public String login()  //按下页面上的“确定”时执行
{
           ….
}
}
所有的managed bean需要通过config文件进行管理

<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">

<faces-config>
    <navigation-rule>
        <from-view-id>/pages/index.jsp</from-view-id>
        <navigation-case>
            <from-outcome>login</from-outcome>
            <to-view-id>/pages/welcome.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
      
    <managed-bean>
        <managed-bean-name>user</managed-bean-name>
         <managed-bean-class>
             onlyfun.caterpillar.UserBean
         </managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>

通过这个例子我们可以看到,JSF的事件驱动与开发Swing程序是很相似的,页面上的UI组件可以触发到UI Bean的某个method或者与UI Bean的某个属性值进行绑定,这样的封装方式使开发者无需关心HTML的具体细节,让开发者将精力尽可能的投入到业务逻辑上去

 一个datatable的例子
将数据库查询到的记录以table的形式呈现出来,这是在WEB应用开发的一个常用的表现方法,JSF Html标签库中提供了<h:datatable/>以方便的实现这一功能

Index.jsp

<h:form>
<h:dataTable value="#{bb.customerList}" var="customers">
<%-- nitrox:varType="com.entity.Customer" --%>
<h:column>
<f:facet name="header">
<h:outputText value="Company Name"/>
</f:facet>
<h:outputText value="#{customers.companyName}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="City"/>
</f:facet>
<h:outputText value="#{customers.city}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Address"/>
</f:facet>
<h:outputText value="#{customers.address}"/>
</h:column>
</h:dataTable>
</h:form>



managed bean



faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>



<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config>

<application>
<message-bundle>resources.application</message-bundle>
<locale-config>
<default-locale>en</default-locale>
</locale-config>
</application>
<managed-bean>
<managed-bean-name>bb</managed-bean-name>
<managed-bean-class>com.corejsf.BackingBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>


我们将customerList绑定给datatable,并且在datatable中指定显示的columns,这样我们会很方便的得到table的呈现



除了使用JSF提供的标准标签库,我们也可以象Swing一样制作自己的标签组件,具体请参考SUN 网站上针对JSF的document.

另外,JSF已经是JCP的标准,也就是说,其他的开源组织以及厂商也可以在这个标准上开发自己的JSF组件以对JSF的功能库进行扩展,目前开源组织Apache的MyFaces以及Oracle 的ADF都得到了很好的应用
分享到:
评论
1 楼 gislei 2006-12-26  
677

相关推荐

    JavaServer Faces 教程技术指导

    JavaServer Faces 教程技术指导

    Java server faces.rar_faces

    java server faces框架简介

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    第I部分 javaserver faces框架 第1章 javaserver faces简介 1.1 什么是javaserver faces 1.2 javaserver faces的历史 1.2.1 公共网关接口 1.2.2 servletapi 1.2.3 java服务器页面 1.2.4 apachestruts 1.2.5 spring...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版).part1

    第I部分 javaserver faces框架 第1章 javaserver faces简介 1.1 什么是javaserver faces 1.2 javaserver faces的历史 1.2.1 公共网关接口 1.2.2 servletapi 1.2.3 java服务器页面 1.2.4 apachestruts 1.2.5 spring...

    JavaServer Faces API (2_0)

    JavaServer Faces (2.0) 框架 API 帮助文档 英文版

    JSF Java Server Faces (JSF)框架

    JSF是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。JSF(Java Server Faces)技术为开发...Java Server Faces技术的重要开发框架 sun-ri、myfaces、icefaces、richfaces、seam

    JavaServer Faces (JSF)

    JavaServer Faces (JSF) 是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。它提供了一种以组件为中心的用户界面(UI)构建方法,从而简化了Java服务器端应用程序的开发。...

    JavaServer Faces 2.0, The Complete Reference

    JavaServer Faces 2.0, The Complete Reference 自从JSF 2.0立项起,就一直关注他,除了他承诺的那些技术和思想上的先进性,更多的原因是由于他为适应Web 2.0开发应用而提出的简化开发流程,提供灵活便捷的组件开发...

    JSF的基础入门,JavaServer Faces作为一种新兴的Web表现层框架

    JavaServer Faces作为一种新兴的Web表现层框架,正在受到越来越多的关注。本文描述了JSF的几大优势,以及这些优势所带来的Web开发的重大变革,从而试图 说明JSF将会在众多竞争者中脱颖而出,成为Web表现层框架的主流...

    Java Server Faces编程.part1

    JSF(Java Server Faces)体系结构是一种Web应用程序框架,它是首个Web应用程序开发的标准框架。JSF提供了一个基于组件的架构(框架)用于管理和构建Web应用程序接口,它也提供了丰富的功能集包含事件处理机制...

    通信与网络中的简述利用JavaServer Faces开发Web应用程序

    JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。JavaServer Faces 还引起了广大 Java/Web 开发人员的兴趣。...

    JSF(java server faces)开源框架的源代码

    JSF的源代码,即是jsf本身框架的源代码,通过阅读可以更好地学习JSF,深入理解它的精髓。

    论文研究-eXoPlatform——企业信息门户的实现.pdf

    介绍了一种企业信息门户的实现技术eXo Platform,它基于JSR 168和WSRP标准,以JavaServer Faces作为用户...在分析了eXo Platform体系结构和组成模块的基础上,详细分析了JavaServer Faces框架的体系结构及处理流程。

    简述利用JavaServer Faces开发Web应用程序

    JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。JavaServer Faces 还引起了广大 Java/Web 开发人员的兴趣。...

    Java.Server.Faces编程.part2

    JSF(Java Server Faces)体系结构是一种Web应用程序框架,它是首个Web应用程序开发的标准框架。JSF提供了一个基于组件的架构(框架)用于管理和构建Web应用程序接口,它也提供了丰富的功能集包含事件处理机制...

    JSF.rar_JSF_faces_java 框架

    JavaServer Faces是JavaEE中非常好用的WEB层框架,利用它可以简便程序开发中的重复劳动工作和复杂性.本篇介绍深入浅出JSF,适于初学者.

    jsf-sample:javaserver面临的例子

    本文档旨在描述Java EE平台的JavaServer Faces(JSF)框架的要点,并且还旨在展示在Tomcat应用程序服务器上部署的具有Hibernate,PrimeFaces和Maven的基础项目。 有关更多信息,建议参考。 联合部队 JavaServer ...

    JSF2.1+AJAX(jar包+源码)

    JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。JavaServer Faces 还引起了广大 Java/Web 开发人员的兴趣。...

    JSF标准标签

    JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。JavaServer Faces 还引起了广大 Java/Web 开发人员的兴趣。...

    开发JSF应用程序(与Web有关)

    一年以来,Java Server Faces 是 J2EE Web 开发方面最值得期待的技术之一。随着 WebSphere Studio V5.1.1的发行,Java Server Faces 已经出现了。Java Server Faces (JSF) 提供了令人兴奋的可视化开发 J2EE Web应用...

Global site tag (gtag.js) - Google Analytics