`
esffor
  • 浏览: 1370658 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JSF入门实例

阅读更多

    Web应用程序的开发与传统的单机程序开发在本质上存在着太多的差异,Web应用程序开发人员至今不可避免的必须处理HTTP的细节,而HTTP无状态的(stateless)本质,与传统应用程序必须维持程序运行过程中的信息有明显的违背,再则Web应用程序面对网站上不同的使用者同时的存取,其执行线程安全问题以及数据验证、转换处理等问题,又是复杂且难以解决的。
另一方面,本质上是静态的HTML与本质上是动态的应用程序又是一项违背,这造成不可避免的,处理网页设计的美术人员与程序设计人员,必须被彼此加入至视图组件中的逻辑互相干扰,即便一些视图呈现逻辑以标签的方式呈现,试图展现对网页设计美术人员的亲切,但它终究必须牵涉到相关的流程逻辑。
有很多方案试着解决种种的困境,而各自的着眼点各不相同,有的从程序设计人员的角度来解决,有的从网页设计人员的角度来解决,各种的框架被提出,所造成的是各种不统一的标签与框架,为了促进产能的集成开发环境(IDE)难以整合这些标签与框架,另一方面,开发人员的学习负担也不断的加重,他们必须一人了解多个角色的工作。
JavaServer Faces的提出在试图解决这个问题,它试图在不同的角度上提供网页设计人员、应用程序设计人员、组件开发人员解决方案,让不同技术的人员可以彼此合作又不互相干扰,它综合了各家厂商现有的技术特点,由Java Community Process(JCP)团队研拟出来的一套标准,并在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了。

 

现在可以开发一个简单的程序了,我们将设计一个简单的登入程序,使用者提交名称,之后由程序显示使用者名称及欢迎信息。
程序开发人员
先看看应用程序开发人员要作些什么事,我们编写一个简单的JavaBean:

 

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:

 

<?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网页:

 

<%...@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=GB2312"%>
<html>
第 5 页 共 55 页
JSF 入门
<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>

 

我们使用了JSF的core与html标签库,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页面。
网页设计人员不必理会表单传送之后要作些什么,他只要设计好欢迎页面就好了:

 

<%...@ 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=GB2312"%>
<html>
<head>
<title>第一个JSF程序</title>
</head>
<body>
<f:view>
<h:outputText value="#{user.name}"/> 您好!
<h3>欢迎使用 JavaServer Faces!</h3>
</f:view>
</body>
</html>

 

这个页面没什么需要解释的了,如您所看到的,在网页上没有程序逻辑,网页设计人员所作的就是遵照页面流程,使用相关名称取出数据,而不用担心实际上程序是如何运行的。
接下来启动Container,连接上您的应用程序网址,例如:http://localhost:8080/jsfDemo/pages/index.faces,填入名称并提交表单,您的欢迎页面就会显示了。

 

分享到:
评论

相关推荐

    JSF入门实例 源代码

    这个"JSF入门实例 源代码"是专门为初学者设计的,帮助他们快速理解并掌握JSF的基本概念和用法。下面我们将深入探讨JSF的核心特性、工作原理以及如何通过给定的实例进行学习。 1. JSF概述: JSF是一种官方支持的...

    JSF 入门实例 代码

    **JSF(JavaServer Faces)** 是一个Java平台上的...对于初学者,通过实践"JSF入门实例代码"中的例子,可以快速掌握JSF的基础知识,并逐步深入到更高级的主题,如Mojarra和MyFaces实现的差异,以及CDI和JSF的集成等。

    JSF入门实例-用户登录

    在这个"JSF入门实例-用户登录"中,我们将深入理解如何使用JSF来实现一个基本的用户登录功能。 1. **创建JSF工程** 在Eclipse这样的集成开发环境中,可以创建一个新的Dynamic Web Project,然后通过添加库或者使用...

    jsf入门实例

    以下是对JSF入门实例的详细解析: 1. **JSFFive**: JSFFive可能是一个介绍JSF核心概念的例子,如视图(View)、控制器(Controller)和模型(Model)。在JSF中,视图通常由JSP页面组成,控制器由JSF的事件处理...

    jsf入门实例教程

    **JSF(JavaServer Faces)入门实例教程** JavaServer Faces(JSF)是Java平台上的一个用于构建Web应用程序的UI框架。它简化了用户界面组件的创建和管理,提供了MVC(模型-视图-控制器)架构,使得开发人员可以更...

    jsf 入门 helloWorld

    **JSF(JavaServer Faces)入门 HelloWorld 指南** JavaServer Faces (JSF) 是一个用于构建用户界面的 JavaEE 核心技术,它提供了一种声明式的方式来创建 Web 应用程序的用户界面。JSF 提供了一个组件模型,使得...

    jsf入门列子和jsf与Tiles结合

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

    JSF入门(中文pdf)

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

    JSF入门代码

    在"JSF入门代码"这个实例中,我们可以看到一个简单的JSF应用的创建过程。开发者通常会使用JSF提供的UI组件,如按钮、文本框等,将它们与后端的JavaBeans(也称为Managed Beans)进行绑定,从而实现数据的显示和交互...

    《JSF入门》简体中文版

    本资源“《JSF入门》简体中文版”是专为初学者设计的教程,旨在帮助读者快速掌握JSF的基本概念和实践技巧。 **1. JSF框架概述** JSF是Java EE的一部分,它通过组件模型简化了Web应用开发,允许开发者使用声明式编程...

    JSF入门教材简体中文版(html版 pdf版)

    总之,JSF入门教材是初学者了解和掌握JSF技术的良好起点,结合实例和练习,可以帮助你快速建立起对JSF框架的理解,并能开始构建自己的Web应用。在学习过程中,建议动手实践,结合源代码分析,加深理论知识的理解,...

    jsf入门(pdf格式)

    在本文中,我们将深入探讨JSF的基本概念、核心组件以及如何入门JSF开发。 首先,JSF的核心思想是将用户界面与业务逻辑分离,通过组件模型简化前端开发。它定义了一套标准的UI组件库,如按钮、文本框、表格等,...

    《JSF入门》培训教程PPT

    JavaScript Server Faces(JSF)是Java平台上的一种用于构建Web应用程序的MVC(Model-View-Controller)框架。...在学习过程中,结合《JSF标签》和《JSF入门》的培训教程,能够更好地掌握JSF的精髓。

    JSF入门(一)

    在JSF上下文中,这些beans可以被自动创建和管理,开发者只需定义bean的属性和方法,JSF会自动处理实例化和依赖注入。 **5. JSF生命周期** JSF组件有一个明确的生命周期,包括六步:恢复视图、应用请求值、处理验证...

    JSF入门资料.pdf

    这份JSF入门资料将引导读者理解这些概念,并通过实例展示如何在实践中运用它们。对于想要学习或提升JSF技能的开发者来说,这份资料是一份宝贵的资源。通过深入学习和实践,读者将能够构建功能丰富的、基于JSF的Web...

    JSF实例开发教程(经典入门到精通)

    **JSF(JavaServer ...通过实践,你将掌握如何设计和实现高效、可维护的JSF应用,从而达到“从入门到精通”的目标。教程中的"jsf教程.pdf"很可能是包含这些实例和详细步骤的详细指南,是学习JSF不可或缺的参考资料。

Global site tag (gtag.js) - Google Analytics