31
Java Servle Faces ThS Văn Thiên Hoàng

Bài 12: JSF-2 - Lập Trình Mạng Nâng Cao

Embed Size (px)

DESCRIPTION

Lập Trình Mạng Nâng Cao - JSF

Citation preview

Page 1: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Java Servle Faces

ThS Văn Thiên Hoàng

Page 2: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Nội dung

JSF là gì? Thuận lợi của JSF. Kiến trúc JSF. Mô hình hoạt động JSF.

Page 3: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Java Server Faces là gì ?

JSF là một nền tảng công nghệ cho phép thiết lập mô hình MVC.

Cung cấp một tập hợp các thành phần dùng lại cho phép trình bày GUI dựa vào Web.

Cung cấp một tập các thẻ JSP cho phép truy cập các thành phần.

Page 4: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Thuận lợi của JFS

Các cách kiểm soát GUI Cung cấp thư viện API kết hợp với các custom

tags để tạo giao diện HTML phức tạp. Kiểm soát sự kiện

Hỗ trợ viết code java để kiểm soát sự kiện khi form được submit.

Quản lý Bean Hỗ trợ đầy đủ việc sử dụng Bean và truyền

tham số. Ngôn ngữ: hỗ trợ đầy đủ cách thức để truy

cập thuộc tính bean và các thành phần khác.

Page 5: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Kiến trúc JSF

JSF tuân thủ mô hình MVC Model: đối tượng và thuộc tính của ứng dụng. View: Cách biểu diễn người sử dụng. Controller: Định nghĩa cách xử lý nghiệp vụ

của ứng dụng.

Page 6: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Xây dựng các ứng dụng cơ bản Ví dụ ứng dụng là một phần mềm máy tính bỏ

túi (Calculator), để minh họa: Làm thế nào để bố trí một ứng dụng JSF để triển khai Làm thế nào để cấu hình một tệp tin web.xml cho JSF Làm thế nào để cấu hình một tệp tin faces-config.xml

cho một ứng dụng Viết bean quản lý (còn gọi là các đối tượng mô hình

và các trình điều khiển) Xây dựng khung nhìn bằng cách sử dụng công nghệ

JSP Sử dụng các thư viện thẻ tùy biến để xây dựng cây

thành phần trong gốc khung nhìn Mặc định duyệt tính hợp lệ của các trường biểu mẫu

Page 7: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Xây dựng các ứng dụng cơ bản (1)

Page 8: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Các bước thực hiện

Khai báo Faces Servlet và thêm ánh xạ Faces Servlet trong tệp tin web.xml của bộ mô tả triển khai ứng dụng Web

Chỉ rõ tệp tin faces-config.xml trong tệp tin web.xml

Tạo lớp Calculator Khai báo bean Calculator trong tệp tin faces-

config.xml file Tạo trang index.jsp Tạo trang calculator.jsp

Page 9: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Khai báo servlet Faces và ánh xạ servlet

Để sử dụng Servlet Faces, cần phải cài đặt nó trong tệp tin web.xml

<servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-

class> <load-on-startup>1</load-on-startup>

</servlet> <servlet-mapping>

<servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping>

<servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern>

</servlet-mapping>

Page 10: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Chỉ rõ tệp tin faces-config.xml file

Tạo tập tin cấu hìnhfaces-config.xml và đặt nó vào trong thư mục WEB-INF.

<?xml version='1.0' encoding='UTF-8'?><!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config version="1.2" 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">

</faces-config>

Page 11: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Tạo lớp Calculator

Package my;public class Calculator {

private int firstNumber = 0;private int result = 0;private int secondNumber = 0;public void add() { result = firstNumber +

secondNumber; }public void multiply() { result = firstNumber *

secondNumber; } public void clear() { result = 0; } public int getFirstNumber() { return firstNumber; } public void setFirstNumber(int firstNumber) {this.firstNumber = firstNumber; } public int getResult() { return result; } public void setResult(int result) { this.result = result; } public int getSecondNumber() { return secondNumber; } public void setSecondNumber(int secondNumber) { this.secondNumber = secondNumber; } }

Page 12: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Khai báo bean Calculator trong tệp tin faces-config.xml file

<?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>calculator</managed-bean-name>

<managed-bean-class> my.Calculator </managed-bean-

class>

<managed-bean-scope>request</managed-bean-scope>

</managed-bean>

</faces-config>

Page 13: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Tạo trang index.jsp

Mục đích của trang index.jsp trong ứng dụng Calculator là để đảm bảo rằng trang calculator.jsp nạp vào trong bối cảnh JSF sao cho có thể tìm thấy gốc khung nhìn tương ứng.

<jsp:forward page="/faces/calculator.jsp" />

Page 14: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Tạo trang calculator.jsp

//Tập tin. /src/main/webapp/calculator.jsp<?xml version="1.0" encoding="ISO-8859-1" ?> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Calculator Application</title> </head> <body> <f:view> <h:form id="calcForm"> <h4>Calculator</h4> <table> <tr> <td><h:outputLabel value="First Number" for="firstNumber" /></td> <td><h:inputText id="firstNumber" value="#{calculator.firstNumber}" required="true" /></td> <td><h:message for="firstNumber" /></td> </tr>

Page 15: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Tạo trang calculator.jsp

<tr>

<td><h:outputLabel value="Second Number"

for="secondNumber" /> </td

<td><h:inputText id="secondNumber"

value="#{calculator.secondNumber}" required="true" /></td>

<td><h:message for="secondNumber" /></td>

</tr> </table>

<div>

<h:commandButton action="#{calculator.add}" value="Add" />

<h:commandButton action="#{calculator.multiply}"

value="Multiply" />

<h:commandButton action="#{calculator.clear}" value="Clear"

immediate="true"/>

</div>

</h:form>

Page 16: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Tạo trang calculator.jsp

<h:panelGroup rendered="#{calculator.result != 0}">

<h4>Results</h4>

<table>

<tr>

<td> First Number ${calculator.firstNumber} </td></tr>

<tr>

<td> Second Number ${calculator.secondNumber} </td>

</tr>

<tr><td> Result ${calculator.result} </td></tr>

</table>

</h:panelGroup>

</f:view>

</body>

</html>

Page 17: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Tạo trang calculator.jsp

<h:panelGroup rendered="#{calculator.result != 0}">

<h4>Results</h4>

<table>

<tr>

<td> First Number ${calculator.firstNumber} </td></tr>

<tr>

<td> Second Number ${calculator.secondNumber} </td>

</tr>

<tr><td> Result ${calculator.result} </td></tr>

</table>

</h:panelGroup>

</f:view>

</body>

</html>

Page 18: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Các thẻ JSF

<f:view> </f:view> <h:form id=""> </h:form> <h:outputLabel value="" for="" /> <h:inputText id="" value=""

required="true" /> <h:message for="" /> <h:commandButton action="" value="" /> <h:panelGroup></h:panelGroup>

Page 19: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

<h:panelGrid

Sử dụng <h:panelGrid> để hiển thị dữ liệu dạng bảng.

Không thể thêm HTML vào một <h:panelGrid>.

Page 20: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Tạo trang calculator.jsp-phần nhập

//Tập tin. /src/main/webapp/calculator.jsp<?xml version="1.0" encoding="ISO-8859-1" ?> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head>

<title>Calculator Application</title></head><body> <h:form id="calcForm"> <h4>Calculator</h4>

Page 21: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Tạo trang calculator.jsp-phần nhập

<h:panelGrid columns="3">

<%-- First Number--%>

<h:outputLabel value="First Number" for="firstNumber" /> <h:inputText id="firstNumber" value="#{calculator.firstNumber}" required="true" /> <h:message for="firstNumber" /> <%-- Second Number--%> <h:outputLabel value="Second Number" for="secondNumber" /> <h:inputText id="secondNumber" value="#{calculator.secondNumber}" required="true"/> <h:message for="secondNumber" /> </h:panelGrid> <div> <h:commandButton action="#{calculator.add}" value="Add" /> <h:commandButton action="#{calculator.multiply}" value="Multiply" /> <h:commandButton action="#{calculator.clear}" value="Clear" immediate="true"/> </div> </h:form>

Page 22: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Tạo trang calculator.jsp-phần kết quả

<h:panelGroup rendered="#{calculator.result != 0}">

<h4>Results</h4>

<h:panelGrid columns="1">

<h:outputText value="First Number #{calculator.firstNumber}"/>

<h:outputText value="Second Number #{calculator.secondNumber}"/>

<h:outputText value="Result #{calculator.result}"/>

</h:panelGrid>

</h:panelGroup>

</f:view>

</body>

</html>

Page 23: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Định kiểu cho PanelGrid

//Tập tin. /src/main/webapp/calculator.jsp<?xml version="1.0" encoding="ISO-8859-1" ?> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head>

<title>Calculator Application</title><link rel="stylesheet" type="text/css“

href="<%=request.getContextPath()%>/css/main.css" /> </head><body> <h:form id="calcForm"> <h4>Calculator</h4>

Page 24: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

CSS cho PanelGrid

oddRow { background-color: white;

}evenRow {

background-color: silver; }formGrid {

border: solid #000 3px; width: 400px; } resultGrid {

border: solid #000 1px; width: 200px; }

/css/main.css

Page 25: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Sử dụng CSS, thông báo <h:panelGrid columns="3“ rowClasses="oddRow, evenRow" styleClass="formGrid">

<%-- First Number--%>

<h:outputLabel value="First Number" for="firstNumber" /> <h:inputText id="firstNumber" value="#{calculator.firstNumber}" required="true“

label="First Number"/> <h:message for="firstNumber" /> <%-- Second Number--%> <h:outputLabel value="Second Number" for="secondNumber" /> <h:inputText id="secondNumber" value="#{calculator.secondNumber}" required="true“

label=“Second Number"/>

<h:message for="secondNumber" /> </h:panelGrid> <div> <h:commandButton action="#{calculator.add}" value="Add" /> <h:commandButton action="#{calculator.multiply}" value="Multiply" /> <h:commandButton action="#{calculator.clear}" value="Clear" immediate="true"/> </div> </h:form>

Page 26: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Sử dụng CSS

<h:panelGroup rendered="#{calculator.result != 0}">

<h4>Results</h4>

<h:panelGrid columns="1“ rowClasses="oddRow, evenRow"

styleClass="resultGrid">

<h:outputText value="First Number #{calculator.firstNumber}"/>

<h:outputText value="Second Number #{calculator.secondNumber}"/>

<h:outputText value="Result #{calculator.result}"/>

</h:panelGrid>

</h:panelGroup>

</f:view>

</body>

</html>

Page 27: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Hiển thị thông báo tóm tắt <h:panelGrid columns="3“ rowClasses="oddRow, evenRow" styleClass="formGrid">

<%-- First Number--%>

<h:outputLabel value="First Number" for="firstNumber" /> <h:inputText id="firstNumber" value="#{calculator.firstNumber}" required="true”>

<h:message for="firstNumber" showSummary="true" showDetail="false"/>

<%-- Second Number--%> <h:outputLabel value="Second Number" for="secondNumber" /> <h:inputText id="secondNumber" value="#{calculator.secondNumber}" required="true“

label=“Second Number"/>

<h:message for="secondNumber" /> </h:panelGrid> <div> <h:commandButton action="#{calculator.add}" value="Add" /> <h:commandButton action="#{calculator.multiply}" value="Multiply" /> <h:commandButton action="#{calculator.clear}" value="Clear" immediate="true"/> </div> </h:form>

Page 28: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Viết đè lên nội dung thông báo

<h:panelGrid columns="3“ rowClasses="oddRow, evenRow" styleClass="formGrid">

<%-- First Number--%>

<h:outputLabel value="First Number" for="firstNumber" /> <h:inputText id="firstNumber" value="#{calculator.firstNumber}" required="true“

label="First Number“ requiredMessage="required" converterMessage="not a valid" />

<h:message for="firstNumber" /> <%-- Second Number--%> <h:outputLabel value="Second Number" for="secondNumber" /> <h:inputText id="secondNumber" value="#{calculator.secondNumber}" required="true“

label=“Second Number"/>

<h:message for="secondNumber" /> </h:panelGrid> <div> <h:commandButton action="#{calculator.add}" value="Add" /> <h:commandButton action="#{calculator.multiply}" value="Multiply" /> <h:commandButton action="#{calculator.clear}" value="Clear" immediate="true"/> </div> </h:form>

Page 29: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Thay đổi thông báo toàn cục

<?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"> <application>

<message-bundle>messages</message-bundle> </application> ...

Page 30: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Tạo tệp messages.properties

javax.faces.component.UIInput.REQUIRED_detail=required javax.faces.converter.IntegerConverter.INTEGER_detail=not a valid number

Page 31: Bài 12:  JSF-2 - Lập Trình Mạng Nâng Cao

Câu hỏi