什么是JSF:
JSF是一种事件驱动型的组件模型,以某个组件为单位,核心技术为FacesServlet.
JSF(Java Server Faces)是基于MVC模式的新一代web framework,是一套JCP支持的新一代web开发规范,各个厂商可以定义自己的JSF实现,使开发更加容易.
JSF的优点:
(1)基于MVC,可以有效的将数据显示与业务逻辑分开处理.
(2)有功能强大丰富的web开发组件,可以可视化的设计开发web应用程序.
(3)事件驱动,这是JSF比较重要的特点,这种机制大大减少了开发时间,提高了开发效率.
一个简单的JSF应用(实现两数相加,显示结果):
文件列表:
add.jsp
result.jsp
web.xml
faces-config.xml
BackBean.java
AddBean.java
调试环境:
Apache Tomcat 6.0.13 + Eclipse 3.3.1 + jsf-1.2_04
步骤如下:
(1)新建web项目JSFLangsin
(2)在项目中添加JSF的几个库文件(jsf-*.jar)
WEB-INF/lib/commons-beanutils.jar
WEB-INF/lib/commons-collections.jar
WEB-INF/lib/commons-digester.jar
WEB-INF/lib/commons-logging-api.jar
WEB-INF/lib/jsf-api.jar
WEB-INF/lib/jsf-ri.jar
WEB-INF/lib/jstl.jar
WEB-INF/lib/standard.jar
(3)编写javaBean
(4)编写后台Bean
(5)编写相加的jsp页面
JSF跟strtus一样,有自己的一套tab library,它通过解析这些tag来实现对JSF程序的控制.目前,JSF有2套tab:jsf_core.tld和html_basic.tld,从名字上可以看出来,第一个主要是核心JSF程序使用的tag,包括view(所有的JSF程序都必须有的tag),loadBundle(资源相关),validator(校验相关)等等.第二个是web页面设计相关的的一些html组件tag,这些组件,可以组成普通或者复杂的web应用程序.
(6)编写显示结果的jsp页面
(7)修改web.xml文件
JSF是一个标准的web framework,是以Servlet为调度核心,因此,如果想正常运行JSF程序,必须把JSF作为servlet来运行,后缀名为:.faces
(8)添加JSF配置文件faces-config.xml
JSF是作为Servlet来运行,也有自己的配置文件,这个文件中配置了JSF正确运行需要的一些信息,包括managed-bean(将JSF web页面中需要的bean以managed的方式配置起来,这样,就可以在web 页面中直接调用该bean 的属性和方法),navigation-rule(JSF页面之间的流转/调度配置).
(9)O了,让“猫”跑起来!!!(注意:后缀以不是jsp,改为faces)
这里提一下,JSF最主要的特性之一,事件驱动,就是通过html组件来体现的,在定义了一个按钮以后,只要定义一下它的action,就可以直接的将这个动作映射到后台的某个managed-bean的某个方法上,这样,大大减少了原来中间层的javascript调用,也就缩短了开发时间,并且,也减少了中间出错的几率.
JSF是一种事件驱动型的组件模型,以某个组件为单位,核心技术为FacesServlet.
JSF(Java Server Faces)是基于MVC模式的新一代web framework,是一套JCP支持的新一代web开发规范,各个厂商可以定义自己的JSF实现,使开发更加容易.
JSF的优点:
(1)基于MVC,可以有效的将数据显示与业务逻辑分开处理.
(2)有功能强大丰富的web开发组件,可以可视化的设计开发web应用程序.
(3)事件驱动,这是JSF比较重要的特点,这种机制大大减少了开发时间,提高了开发效率.
一个简单的JSF应用(实现两数相加,显示结果):
文件列表:
add.jsp
result.jsp
web.xml
faces-config.xml
BackBean.java
AddBean.java
调试环境:
Apache Tomcat 6.0.13 + Eclipse 3.3.1 + jsf-1.2_04
步骤如下:
(1)新建web项目JSFLangsin
(2)在项目中添加JSF的几个库文件(jsf-*.jar)
WEB-INF/lib/commons-beanutils.jar
WEB-INF/lib/commons-collections.jar
WEB-INF/lib/commons-digester.jar
WEB-INF/lib/commons-logging-api.jar
WEB-INF/lib/jsf-api.jar
WEB-INF/lib/jsf-ri.jar
WEB-INF/lib/jstl.jar
WEB-INF/lib/standard.jar
(3)编写javaBean
package com.langsin;
public class BackBean {
private double firstNumber=0.0;
private double secondNumber=0.0;
private double result;
private AddBean addbean=new AddBean();
public double getFirstNumber() {
return firstNumber;
}
public void setFirstNumber(double firstNumber) {
this.firstNumber = firstNumber;
}
public double getResult() {
return result;
}
public void setResult(double result) {
this.result = result;
}
public double getSecondNumber() {
return secondNumber;
}
public void setSecondNumber(double secondNumber) {
this.secondNumber = secondNumber;
}
//这里该方法要定义为String类型,返回的字符串就是在faces-config.xml中定义的navigation-rule -> navigation-case - > success,JSF也就是通过这个来找到result.jsp页面进行调度的.
public String add()
{
result=addbean.add(firstNumber, secondNumber);
return "success";
}
}
(4)编写后台Bean
package com.langsin;
public class AddBean {
public double add(double a,double b)
{
return a+b;
}
}
(5)编写相加的jsp页面
JSF跟strtus一样,有自己的一套tab library,它通过解析这些tag来实现对JSF程序的控制.目前,JSF有2套tab:jsf_core.tld和html_basic.tld,从名字上可以看出来,第一个主要是核心JSF程序使用的tag,包括view(所有的JSF程序都必须有的tag),loadBundle(资源相关),validator(校验相关)等等.第二个是web页面设计相关的的一些html组件tag,这些组件,可以组成普通或者复杂的web应用程序.
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<title></title>
</head>
<body>
<f:view>
<h:form>
<h:panelGrid columns="3">
<h:outputLabel value="请输入第一个数字"/>
<h:inputText id="firstNumber" value="#{mybean.firstNumber}"/>
<h:message for="firstNumber"/>
<h:outputLabel value="请输入第二个数字"/>
<h:inputText id="secondNumber" value="#{mybean.secondNumber}"/>
<h:message for="secondNumber"/>
</h:panelGrid>
<h:commandButton value="加" action="#{mybean.add}"/>
</h:form>
</f:view>
</body>
</html>
(6)编写显示结果的jsp页面
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<title></title>
</head>
<body>
<f:view>
计算结果是:<h:outputText value="#{mybean.result}"/>
</f:view>
</body>
</html>
(7)修改web.xml文件
JSF是一个标准的web framework,是以Servlet为调度核心,因此,如果想正常运行JSF程序,必须把JSF作为servlet来运行,后缀名为:.faces
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
</web-app>
(8)添加JSF配置文件faces-config.xml
JSF是作为Servlet来运行,也有自己的配置文件,这个文件中配置了JSF正确运行需要的一些信息,包括managed-bean(将JSF web页面中需要的bean以managed的方式配置起来,这样,就可以在web 页面中直接调用该bean 的属性和方法),navigation-rule(JSF页面之间的流转/调度配置).
<?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">
<faces-config >
<managed-bean>
<managed-bean-name>mybean</managed-bean-name>
<managed-bean-class>com.langsin.BackBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/add.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/result.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
(9)O了,让“猫”跑起来!!!(注意:后缀以不是jsp,改为faces)
这里提一下,JSF最主要的特性之一,事件驱动,就是通过html组件来体现的,在定义了一个按钮以后,只要定义一下它的action,就可以直接的将这个动作映射到后台的某个managed-bean的某个方法上,这样,大大减少了原来中间层的javascript调用,也就缩短了开发时间,并且,也减少了中间出错的几率.