文章目錄
- JavaServer Faces 的 MVC 實現
簡介
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更像是提交式