简介
JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。JavaServer Faces 还引起了广大 Java/Web 开发人员的兴趣。“企业开发人员”和 Web 设计人员将发现 JSF 开发可以简单到只需将用户界面 (UI) 组件拖放到页面上,而“系统开发人员”将发现丰富而强健的 JSF API 为他们提供了无与伦比的功能和编程灵活性。JSF 还通过将良好构建的模型-视图-控制器 (MVC) 设计模式集成到它的体系结构中,确保了应用程序具有更高的可维护性。最后,由于 JSF 是通过 Java Community Process (JCP) 开发的一种 Java 标准,因此开发工具供应商完全能够为 JavaServer Faces 提供易于使用的、高效的可视化开发环境。
体系结构
JavaServer Faces 的 MVC 实现
JSF 的主要优势之一就是它既是 Java Web 用户界面标准又是严格遵循模型-视图-控制器 (MVC) 设计模式的框架。用户界面代码(视图)与应用程序数据和逻辑(模型)的清晰分离使 JSF 应用程序更易于管理。为了准备提供页面对应用程序数据访问的 JSF 上下文和防止对页面未授权或不正确的访问,所有与应用程序的用户交互均由一个前端“Faces”servlet(控制器)来处理。
图 1:JavaServer Faces 的 MVC 实现
具体DEMO
导入jar包
jsf-impl.jar
jsf-api.jar
jstl-1.2.jar
package org.service;
/**
*@author:张奇峰
*2009-7-2 下午08:55:30
*/
public class Calculate {
private double num1;
private double num2;
private double result;
public double getNum1() {
return num1;
}
public double getNum2() {
return num2;
}
public double getResult() {
return result;
}
public void setNum1(double num1) {
this.num1 = num1;
}
public void setNum2(double num2) {
this.num2 = num2;
}
//计算两数之和
private double sum(double num1,double num2)
{
return num1+num2;
}
public String calculateSum()
{
result=sum(num1, num2);
return "success";
}
}
页面是index.jsp和result.jsp
index.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>第一个JSF</title>
</head>
<body>
<f:view>
<h:form>
<h:panelGrid columns="3">
<h:outputLabel value="第一个数"></h:outputLabel>
<h:inputText id="num1" value="#{calculate.num1}"></h:inputText>
<!---这个绑定的时候 会调用calculate.getNum1() -->
<h:message for="num1"></h:message><!--num1输入错误输出错误信息-->
<h:outputLabel value="第二个数"></h:outputLabel>
<h:inputText id="num2" value="#{calculate.num2}"></h:inputText>
<h:message for="num2"></h:message>
<h:commandButton value="计算和" action="#{calculate.calculateSum}"></h:commandButton>
<!--调用这个计算两数之和的方法时 先会调用calculate.setNum1()和calculate.setNum2() 然后在执行这个计算方法 所以在 Calculate类中要给这两个数都含有get() 和 set() -->
</h:panelGrid>
</h:form>
</f:view>
</body>
</html>
result.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>计算结果</title>
</head>
<body>
<f:view>
<h:outputText value="#{calculate.num1}"/>
与
<h:outputText value="#{calculate.num2}"/>
的和为:<h:outputText value="#{calculate.result}"/>
</f:view>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.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><!--访问的时候都以.faces访问 可修改-->
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
faces-config.xml
<?xml version='1.0' encoding='UTF-8'?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
version="1.2">
<managed-bean>
<managed-bean-name>calculate</managed-bean-name>
<managed-bean-class>org.service.Calculate</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/index.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>
访问 http://localhost:8080/JSFDemo/index.faces
点击按钮转发到result.jsp
显示 :6.0 与 4.0 的和为:10.0
总结:以前也用过Struts 此前JSF也经常被用来两者相比较 个人觉得两者的设计思想有点类似 都是那种触发似的,但也有不同 此是事件驱动之 而Struts更像是提交式