2008-02-26

JSF(Java Server Faces)学习日记

关键字: jsf简单的例子
什么是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
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调用,也就缩短了开发时间,并且,也减少了中间出错的几率.
  • JSFLangsin.rar (5.9 KB)
  • 描述: 附件中是本人做好的例子和JSF需要的jar包
  • 下载次数: 4
评论
发表评论

您还没有登录,请登录后发表评论

yaodi0818
搜索本博客
我的相册
7e768c60-92fc-3f2c-80ab-3997aa55a7f7-thumb
快速理解面向对象
共 2 张
最近加入圈子
存档
最新评论