简介

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更像是提交式   

 

 

 

posted on 2009-07-02 22:12  冷傲残痕  阅读(3036)  评论(0编辑  收藏  举报