`
haiyupeter
  • 浏览: 425906 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JSF入门

阅读更多

本文是良葛格先生在http://www.javaworld.com.tw 上发表的系中的头两篇。其余文章请进入http://www.javaworld.com.twJSF 版块

一、JSF 介绍

    Web
应用程序的开发与传统的单机程序开发在本质上存在着太多的差异,Web 应用程序开发人员至今不可避免的必須处理HTTP 的细节,而HTTP 无状态的(stateless )本质,与传统应用程序必须维持程序运行过程中的信息有明显的违背,再则Web 应用程序面对网站上不同的使用者同时的存取, 其执行与安全问题以及资料验证、转换处理等問題,又是复杂且难解决的。

   
另一方面,本质上是静态的HTML 与本质上是动态的应用程序又是一项违背,这造成不可避免的,处理网页设计的美术人员与程序设计人员,必须被彼此加 入至视图元件中的逻辑互相干扰,即便一些视图呈现逻辑以标记方式呈现,试图展现对网页设计美术人员的亲切,但它终究必须牵涉到相关的流程逻辑。
  

 

    有很多方案试着解决种种的困境,而各自的着眼点各不相同,有的从程序设计人员的角度來解決,有的从网页设计人员的角度来解决,各种的框架被提出,所 造成的是各种不统一的标记与框架,为了提高效益的整合开发环境(IDE )难以整合这些标记与框架,另一方面,开发人员的学习负担也不断的加重,他们必须一 人了解多个角色的工作。

   JavaServer Faces 
的提出在试图解决这个问题,它试图在不同的角度上提供网页设计人员、应用程序设计人员、元件开发人员解决方案, 让不同技术的人员可以彼此合作又不互相干扰,它综合了各家厂商现有的技术特点,由Java Community ProcessJCP )团队研究出来的 一套标准,並在2004 年三月发表了JavaServer Faces 1.0 实现成果。

   
从网页设计人员的角度来看,JavaServer Faces 提供了一套像是新版本的HTML 标记,但它不是静态的,而是动态的,可以与后端的动态 程序结合,但网页设计人员不需要理会后端的动态部分,网页设计人员甚至不太需要接触JSTL 这类的标记,也可以动态的展现资料(像是动态的查询表格內 容),JavaServer Faces 提供标准的标记,这可以与网页编辑程序结合在一起,另一方面,JavaServer Faces 也允许您自定义标 记。

  
从应用程序设计人员的角度来看,JavaServer Faces 提供一个与传统应用程序开发相类似的模型(当然因某些本质上的差异,模型还是稍有不 同),他们可以基于事件驱动来开发程序,不必关切HTTP 的处理细节,如果必须处理一些视觉元件的属性的话,他们也可以直接在整合开发环境上拖拉这些元 件,点选设定元件的属性,JavaServer Faces 甚至还为应用程序设计人员处理了物件与字串(HTTP 传送本质上就是字串)间不匹配的转換问 题。


   
UI 元件开发人员的角度来看,他们可以设计通用的UI 元件,让应用程序的开发产能提高,就如同在设计Swing 元件等,UI 开发人员可以独立开发,只要定义好相关的属性选项来调整细节,而不用受到网页设计人员或应用程序设计人员的干扰。


   
三个角色的知识领域原则上可以互不干扰,根据您的角色,您只要了解其中一个知识领域,就可以运用JavaServer Faces ,其它角色的知识领域您可以不用了解太多细节。


   
当然,就其中一个角色单独来看,JavaServer Faces 隐藏了许多细节,若要全盘了解,其实JavaServer Faces 是复杂的, 每一个处理的环境都值得深入探讨,所以学习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 ,使用JSF 时,所有的请求都透过FacesServlet 来处理,您可以如下定义:

 <?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 了。

二、第一个JSF 程序 

   
现在可以开发一个简单的程式了,我们将设计一个简单的登入程式,使用者送出名称,之后由程序显示使用者名称及欢迎信息。


程序开发人员
    
先看看应用程序开发人员要作些什么事,我们撰写一个简单的JavaBean

UserBean.java 
 
 

package onlyfun.caterpillar;

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

 

这个Bean 将储存使用者的名称,编译好之后放置在/WEB-INF/classes 下。


   
接下来设计页面流程,我们将先显示一个登录网頁/pages/index.jsp ,使用者填入名称并送出表单,之后在/pages/welcome.jsp 中显示Bean 中的使用者名称与欢迎信息。


   
为了JSF 知道我们所设计的Bean 以及页面流程,我们定义一个/WEB-INF/faces-config.xml

faces-config.xml 

 

<?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> 
 


    
<navigation-rule> 中,我们定义了页面流程,当请求来自<from-view-id> 中指定的页面, 並且指定了<navigation-case> 中的<from-outcome>login 时,则会将请求导向 至<to-view-id> 所指定的页面。


    
<managed-bean> 中我们可以统一管理我们的Bean ,我们设定Bean 物件的存活范围是session ,也就是使用者开启浏览器与程序互动过程中都存活。


   
接下来要告诉网页设计人员的信息是,他们可以使用的Bean 名称,即<managed-bean-name> 中设定的名称,以及上面所定义的页面流程。


网页设计人员

首先网页设计人员撰写index.jsp 网页:

index.jsp 
 

<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
 <%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
 <%@page contentType="text/html;charset=GBK"%> 
 <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> 
 


 

   
我们使用了JSFcorehtml 标记库,core 是有关于UI 元件的处理,而html 则是有关于HTML 的进阶标记。


   <f:view>
<html> 有类似的作用,当您要开始使用JSF 元件时,这些元件一定要 在<f:view></f:view> 之间,就如同使用HTML 时,所有的标记一定要在<html>< /html> 之间。


    html
标记库中几乎都是与HTML 标记相关的进阶标记,<h:form> 会产生一个表单,我们使 用<h:inputText> 来显示user 这个Bean 物件的name 属性,而<h:commandButton> 会产生一个 提交按钮,我们在action 属性中指定将根据之前定义的login 页面流程中前往welcome.jsp 页面。


网页设计人员不必理会表单传送之后要作些什么,他只要设计好欢迎页面就好了:

welcome.jsp 
 

 <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
 <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
 <%@page contentType="text/html;charset=GBK"%> 
 <html>
 <head>
 <title>第一个JSF程式</title>
 </head>
 <body>
    <f:view>
        <h:outputText value="#{user.name}"/> 您好!
        <h3>欢迎使用 JavaServer Faces!</h3>
    </f:view>
 </body>
 </html> 
 


 

   
这个页面沒什么需要解释的了,如您所看到的,在网页上沒有程式逻辑,网页设计人员所作的就是遵照页面流程,使用相关名称取出资料,而不用担心实际上程式是如何运作的。

接下来启动Container( 站长注:我用的是Tomcat 5 ,整个目录结构请从本站下载) 连接上您的应用程序网址,例 如:http://localhost:8080/jsfDemo/pages/index.faces ,填入名称并送出表单,您的欢迎页面就会显示了。

分享到:
评论

相关推荐

    清晰版--JSF入门.pdf

    ### JSF入门知识点详解 #### 一、JSF概述 **1.1 简介JSF** JavaServer Faces (JSF) 是一种基于Java的标准技术,用于构建企业级Web应用。JSF的设计目的是简化Web应用程序的开发过程,通过封装HTTP协议的复杂性,...

    JSF入门+JSF web实战+JSF2

    本系列资料包括《JSF入门》、《JSF Web应用实战开发》和《JSF2》,旨在帮助初学者快速掌握JSF的核心概念和技术。 《JSF入门简体中文版》是学习JSF的基础,它涵盖了JSF的基本架构、组件库、生命周期和事件处理等方面...

    JSF入门与标签_JSF入门与标签.

    下面将详细介绍JSF入门、JSF的主要特点以及JSF中的标签使用。 一、JSF入门 JSF入门涉及理解其基本架构和工作流程。JSF应用通常由以下部分组成: 1. **Facelets**: Facelets是JSF的默认视图描述语言,用于构建用户...

    JSF入门必读——JSF入门基础

    1. JSF入门 JSF的基础在于它的组件模型,这些组件可以直接映射到HTML元素,并且可以处理用户的输入。JSF提供了丰富的UI组件库,如按钮、表单、文本框等,开发者可以通过声明式的方式在页面上使用这些组件。 开发...

    值得看的jsf入门教程

    JavaScript全名JavaServer Faces(JSF)是一种基于Java的服务器端Web应用程序开发框架,由Sun Microsystems(现已被Oracle收购)开发。它旨在简化用户界面组件的构建和管理,为开发者提供一套面向对象的API,使其...

    JSF入门级教程

    本教程旨在帮助初学者快速入门JSF,掌握其基本概念、架构和常用功能。 一、JSF概述 JSF是Java Community Process(JCP)制定的标准之一,它基于Model-View-Controller(MVC)设计模式,为Java EE平台提供了丰富的UI...

    JSF全套(JSF入门教+ LIB+ Ajax4JSF使用手册 )

    1. **JSF入门教程**:JSF的基础知识讲解,涵盖了JSF的基本概念、架构和工作原理。这个部分将教你如何配置JSF环境,创建第一个JSF应用,理解JSF生命周期,以及认识JSF的核心组件如输入字段、按钮、表单等。通过这个...

    JSF入门深入学习WORD版

    资源名称:JSF入门深入学习 WORD版内容简介:本文档主要讲述的是JSF入门深入学习;JSF为JAVA的 Web应用用户界面的开发人员提供了标准的编程接口、丰富可扩展的UI组件库(一个核心的JSP标记库用来处理事件、执行验证...

    JSF入门简单中文版

    javaServer+Faces入门简单中文版

    JSF入门(中文pdf)

    本资源提供了一份详细的JSF入门中文PDF教程,旨在帮助初学者快速理解并掌握JSF的核心概念和基本用法。 JSF的核心理念在于简化Java Web开发,通过组件化的方式将界面、业务逻辑和数据模型进行解耦。在JSF中,UI组件...

    JSF入门.zip

    "JSF入门文档"很可能是包含JSF基础教程、组件使用示例、配置指南等内容的资源集合,可以帮助初学者快速掌握JSF的基本概念和用法。文档可能包括以下部分: 1. JSF简介:介绍JSF的历史、目标和基本原理。 2. 安装与...

    jsf入门+标签

    ### JSF入门 JSF的核心概念是组件模型,它将网页元素如按钮、文本框等视为可复用的组件。这些组件可以独立于视图层逻辑进行管理,提高了开发效率和代码的可维护性。JSF使用XML格式的文件(Faces Config)来配置和...

    jsf入门简体中文

    对于初学者,可以通过阅读《JSF入门》这样的书籍或在线教程,快速掌握JSF的基本用法和概念。同时,社区如Stack Overflow、Java EE官方文档以及各种开源项目,都是学习JSF的好去处。 总结,JSF作为Java EE的重要组成...

    jsf入门列子和jsf与Tiles结合

    在上述的JSF入门例子中,我们首先看到的是`UserBean.java`,这是个简单的实体类,模拟了用户登录的情景。它包含了用户名`name`、密码`password`以及错误消息`errMessage`等属性,并提供了相应的getter和setter方法。...

    jsf入门教程中文版

    jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程

Global site tag (gtag.js) - Google Analytics