Hướng dẫn sử dụng Java JSP Standard Tag Library (JSTL)
1. JSTL là gì?
2. Tổng quan về các chức năng của JSTL
Chức năng | Mô tả / Khai báo |
Các thẻ cơ bản (Core Tags) | Các thẻ cơ bản cung cấp hỗ trợ cho bộ lặp (iteration), các điều kiện logic, bắt ngoại lệ, url, chuyển tiếp (forward) hoặc chuyển hướng (redirect),.... Để sử dụng JSTL core tags, bạn cần đưa nó vào trang JSP giống dưới đây: |
Các thẻ cơ bản (Core Tags) |
|
Các thẻ định dạng và địa phương hóa. (Formatting and Localization Tags) | Những thẻ này cung cấp định dạng cho các con số, ngày tháng và hỗ trợ i18n thông qua miền địa phương (locales) và bó tài nguyên (resource bundles). Bạn cần đưa nó vào trang JSP với cú pháp dưới đây. |
Các thẻ định dạng và địa phương hóa. (Formatting and Localization Tags) |
|
Các thẻ SQL (SQL Tags) | Các thẻ JSTL SQL cung cấp các hỗ trợ cho việc tương tác với cơ sở dữ liệu quan hệ như Oracle, MySql v..v. Sử dụng thẻ SQL mà bạn có thể chạy các truy vấn cơ sở dữ liệu, bạn đưa nó vào trong JSP với cú pháp dưới đây: |
Các thẻ SQL (SQL Tags) |
|
Các thẻ XML (XML Tags) | Thẻ XML được sử dụng để làm việc với các tài liệu XML như phân tích cú pháp XML, chuyển đổi dữ liệu XML và XPath đánh giá biểu thức. Cú pháp để có thể sử dụng các thẻ XML trong JSP trang là: |
Các thẻ XML (XML Tags) |
|
Các thẻ hàm JSTL (JSTL Functions Tags) | JSTL tags provide a number of functions that we can use to perform common operation, most of them are for String manipulation such as String Concatenation, Split String etc. Syntax to include JSTL functions in JSP page is:
Thẻ JSTL cung cấp một số chức năng mà chúng ta có thể sử dụng để thực hiện các toán tử thông dùng, hầu hết trong số đó là cho String như nối chuỗi, phân tách chuỗi, ...Cú pháp: |
Các thẻ hàm JSTL (JSTL Functions Tags) |
|
3. Download thư viện JSTL
- <Tomcat>/webapps/examples/WEB-INF/lib
- taglibs-standard-impl-**.jar
- taglibs-standard-spec-**.jar
Thư viện JSTL (Cung cấp bởi Apache) | Thư viện JSTL (Cung cấp bởi Glassfish) |
taglibs-standard-spec-*.jar | javax.servlet.jsp.jslt-api-*.jar |
taglibs-standard-impl-*.jar | javax.servlet.jsp.jstl-*.jar |
- Cung cấp bởi Apache:
<!-- taglibs-standard-spec-*.jar -->
<!-- http://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-spec -->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
<!-- taglibs-standard-impl-*.jar -->
<!-- http://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
- Hoặc cung cấp bởi Glassfish:
<!-- http://mvnrepository.com/artifact/org.glassfish.web/javax.servlet.jsp.jstl -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.servlet.jsp.jstl</artifactId>
<version>1.2.4</version>
</dependency>
<!-- http://mvnrepository.com/artifact/javax.servlet.jsp.jstl/javax.servlet.jsp.jstl-api -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>javax.servlet.jsp.jstl-api</artifactId>
<version>1.2.1</version>
</dependency>
- Cung cấp bởi Sun (Hơi cũ, hiện tại ít được dùng).
<!-- standard.jar -->
<!-- http://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- jstl-*.jar -->
<!-- http://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
4. Tạo WebApp Project
- File/New/Other..
- JSTLTutorial
6. Cấu hình để chạy Webapp
- Run As/Run on Server
7. Một vài lớp tham gia vào các ví dụ
package org.o7planning.jslttutorial.beans;
import java.util.HashSet;
import java.util.Set;
public class Dept {
private int deptNo;
private String deptName;
private String location;
private Set<Emp> employees;
public Dept() {
}
public Dept(int deptNo, String deptName, String location) {
this.deptNo = deptNo;
this.deptName = deptName;
this.location = location;
}
public int getDeptNo() {
return deptNo;
}
public void setDeptNo(int deptNo) {
this.deptNo = deptNo;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public Set<Emp> getEmployees() {
return employees;
}
public void setEmployees(Set<Emp> employees) {
this.employees = employees;
}
public void addEmployee(Emp employee) {
if(this.employees== null) {
this.employees= new HashSet<Emp>();
}
this.employees.add(employee);
}
}
package org.o7planning.jslttutorial.beans;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Emp {
private int empNo;
private String empName;
private String job;
private Date hireDate;
private float salary;
private static final DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
public Emp() {
}
// @hireDateStr - phải có định dạng 'MM/dd/yyyy'.
public Emp(int empNo, String empName, String job,
String hireDateStr, float salary) {
this.empNo = empNo;
this.empName = empName;
this.job = job;
this.salary = salary;
try {
this.hireDate = df.parse(hireDateStr);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
public int getEmpNo() {
return empNo;
}
public void setEmpNo(int empNo) {
this.empNo = empNo;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Date getHireDate() {
return hireDate;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
public float getSalary() {
return salary;
}
public void setSalary(float salary) {
this.salary = salary;
}
}
package org.o7planning.jslttutorial.utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.o7planning.jslttutorial.beans.Dept;
import org.o7planning.jslttutorial.beans.Emp;
public class DBUtils {
private static final List<Dept> DEPARTMENTS = new ArrayList<Dept>();
static {
initData();
}
// Mô phỏng dữ liệu trong Database.
private static void initData() {
Dept accountingDept = new Dept(10, "ACCOUNTING", "NEW YORK");
accountingDept.addEmployee(new Emp(7782, "CLARK", "MANAGER", "6/9/1981", 2450.00f));
accountingDept.addEmployee(new Emp(7839, "KING", "PRESIDENT", "11/17/1981", 5000.00f));
accountingDept.addEmployee(new Emp(7934, "MILLER", "CLERK", "6/9/1981", 1300.00f));
//
Dept reseachDept = new Dept(20, "RESEARCH", "DALLAS");
reseachDept.addEmployee(new Emp(7369, "SMITH", "CLERK", "12/17/1980", 800.00f));
reseachDept.addEmployee(new Emp(7788, "SCOTT", "ANALYST", "4/19/1987", 3000.00f));
reseachDept.addEmployee(new Emp(7876, "ADAMS", "CLERK", "5/23/1987", 1100.00f));
reseachDept.addEmployee(new Emp(7876, "FORD", "ANALYST", "12/3/1981", 3000.00f));
reseachDept.addEmployee(new Emp(7566, "JONES", "MANAGER", "4/2/1981", 2975.00f));
//
//
Dept salesDept = new Dept(30, "SALES", "CHICAGO");
salesDept.addEmployee(new Emp(7654, "MARTIN", "SALESMAN", "9/28/1981", 1250.00f));
salesDept.addEmployee(new Emp(7499, "ALLEN", "SALESMAN", "2/20/1981", 1600.00f));
salesDept.addEmployee(new Emp(7521, "WARD", "SALESMAN", "2/22/1981", 1250.00f));
salesDept.addEmployee(new Emp(7844, "TURNER", "SALESMAN", "9/8/1981", 1500.00f));
salesDept.addEmployee(new Emp(7900, "JAMES", "CLERK", "12/3/1981", 950.00f));
//
Dept openrationsDept = new Dept(40, "OPERATIONS", "BOSTON");
//
DEPARTMENTS.add(accountingDept);
DEPARTMENTS.add(reseachDept);
DEPARTMENTS.add(salesDept);
DEPARTMENTS.add(openrationsDept);
}
// Truy vấn bảng Department.
public static List<Dept> queryDepartments() {
return DEPARTMENTS;
}
// Truy vấn bảng Employee.
// Lấy ra danh sách các nhân viên của 1 phòng ban.
public static Set<Emp> queryEmployees(int deptNo) {
for (Dept dept : DEPARTMENTS) {
if (deptNo == dept.getDeptNo()) {
return dept.getEmployees();
}
}
return null;
}
}
8. Các thẻ JSTL cơ bản (JSTL Core Tags)
Thẻ | Mô tả |
<c:out> | Để viết một cái gì đó trong trang JSP, bạn có thể sử dụng EL cũng có thẻ này |
<c:import> | Giống với <jsp:include> hoặc chỉ thị include (include directive) |
<c:redirect> | Chuyển hướng (redirect) yêu cầu tới một nguồn dữ liệu khác. |
<c:set> | Sét đặt giá trị biến cho bởi phạm vi. |
<c:remove> | Loại bỏ biến ra khỏi phạm vi đã cho. |
<c:catch> | Bắt ngoại lệ và gói vào một đối tượng. |
<c:if> | Điều kiện logic đơn giản, sử dụng với EL và bạn có thể sử dụng nó để xử lý các trường hợp ngoại lệ từ <c:catch> |
<c:choose> | Tag có điều kiện đơn giản mà thiết lập một bối cảnh cho các trường hợp loại trừ lẫn nhau có điều kiện, đánh dấu bằng <c:when> và <c:otherwise> |
<c:when> | Thẻ con của <c:choose>, khi một điều kiện tại when là đúng. |
<c:otherwise> | Thẻ con của <c:choose>, khi tất cả các điều kiện <c:when> là sai. |
<c:forEach> | Dùng để lặp trên một tập hợp. |
<c:forTokens> | dùng để lặp trên chuỗi (tokens) được phân cách bởi một dấu phân cách. |
<c:param> | Được sử dụng với <c:import> để truyền các tham số. |
<c:url> | Để tạo một URL với các tham số tùy chọn (optional query string parameters). |
Bằng với
(equals) | == | eq |
Không bằng
(Not equals) | != | ne |
Nhỏ hơn
(Less than) | < | lt |
Lớn hơn
(Greater than) | > | gt |
Nhỏ hơn hoặc bằng
(Less than or equals) | <= | le |
Lớn hơn hoặc bằng
(Greater than or equals) | >= | ge |
Khái niệm | Điều kiện EL | Kết quả |
Số nhỏ hơn | ${1 < 2} | true |
Số lớn hơn | ${1 > 2} | false |
Số nhỏ hơn
(Less than) | ${1 lt 2} | true |
Số lớn hơn
(Greater than) | ${1 gt 2} | false |
Số hơn hơn hoặc bằng | ${1 >= 1} | true |
Số nhỏ hơn hoặc bằng | ${1 <= 1} | true |
Số nhỏ hơn hoặc bằng
(Less equals) | ${1 le 1} | true |
Số lớn hơn hoặc bằng
(Greater than or equal) | ${1 ge 1} | true |
Số bằng với | ${1 == 1} | true |
Số bằng với
(equal) | ${1 eq 1} | true |
Số không bằng với | ${1 != 2} | true |
Số không bằng với
(not equal) | ${1 ne 2} | true |
Chữ nhỏ hơn | ${'abe' < 'ade'} | true |
Chữ lớn hơn | ${'abe' > 'ade'} | false |
Chữ bằng với
(Equals) | ${'abe' eq 'abe'} | true |
Chữ không bằng với
(Not equals) | ${'abe' ne 'ade'} | true |
Toán tử | Mô tả |
&& | Và |
|| | Hoặc |
${(guess >= 10) && (guess <= 20)} | ${ guess >= 10 && guess <= 20 } |
${(guess < 10) || (guess > 20)} | ${ guess < 10 || guess > 20 } |
Nếu bạn không muốn người dùng truy cập trực tiếp vào các trang JSP bạn có thể để chúng trong thư mục WEB-INF hoặc các thư mục con của thư mục này.
// Lấy ra dữ liệu từ DB (Mô phỏng).
List<Dept> list = DBUtils.queryDepartments();
// Ghi dữ liệu vào thuộc tính 'departments' của request.
request.setAttribute("departments", list);
<c:forEach items="${requestScope.departments}" var="dept">
${dept.deptName}
</c:forEach>
<!-- Hoặc (Bạn có thể không cần requestScope) -->
<c:forEach items="${departments}" var="dept">
${dept.deptName}
</c:forEach>
package org.o7planning.jslttutorial.servlets;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.o7planning.jslttutorial.beans.Dept;
import org.o7planning.jslttutorial.utils.DBUtils;
@WebServlet("/jstlCoreExample01")
public class JstlCoreEx01Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public JstlCoreEx01Servlet() {
super();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Truy vấn dữ liệu từ DB (Mô phỏng).
List<Dept> list = DBUtils.queryDepartments();
// Lưu dữ liệu vào thuộc tính 'departments' của request.
request.setAttribute("departments", list);
// Tạo đối tượng RequestDispatcher
// để Forward (chuyển tiếp) yêu cầu tới jstl_core_example01.jsp
RequestDispatcher dispatcher = getServletContext()
.getRequestDispatcher("/WEB-INF/jsps/jstl_core_example01.jsp");
// Forward (Chuyển tiếp) yêu cầu, để hiển thị dữ liệu trên trang JSP.
dispatcher.forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- Khai báo sử dụng JSTL Core Tags -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL Core Tags Example 01</title>
</head>
<body>
<h2>Departments and Employees</h2>
<!-- Dùng for để duyệt trên các phòng ban (departments) -->
<c:forEach items="${departments}" var="dept">
<h3>${dept.deptName}</h3>
<ul>
<!-- Dùng for để duyệt trên các nhân viên
thuộc phòng ban hiện tại -->
<c:forEach items="${dept.employees}" var="emp">
<li>
${emp.empName} - (${emp.job})
</li>
</c:forEach>
</ul>
</c:forEach>
</body>
</html>
package org.o7planning.jslttutorial.servlets;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.o7planning.jslttutorial.beans.Dept;
import org.o7planning.jslttutorial.utils.DBUtils;
@WebServlet("/jstlCoreExample02")
public class JstlCoreEx02Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public JstlCoreEx02Servlet() {
super();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Chuẩn bị dữ liệu từ DB (Mô phỏng).
List<Dept> list = DBUtils.queryDepartments();
// Lưu dữ liệu vào thuộc tính (attribute) 'departments' của request.
request.setAttribute("departments", list);
// Tạo đối tượng RequestDispatcher
// để forward (chuyển tiếp) yêu cầu tới jstl_core_example02.jsp
RequestDispatcher dispatcher = getServletContext()
.getRequestDispatcher("/WEB-INF/jsps/jstl_core_example02.jsp");
// Forward (Chuyển tiếp) yêu cầu, để hiển thị trên trang JSP.
dispatcher.forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- Khai báo sử dụng JSTL Core Tags -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL Core Tags Example 01</title>
</head>
<body>
<h2>Departments and Employees</h2>
<!-- Dùng for để duyệt trên các phòng ban (departments) -->
<c:forEach items="${departments}" var="dept">
<!-- Kiểm tra một tập hợp có phần tử không -->
<c:if test="${not empty dept.employees}">
<h3>${dept.deptName}</h3>
<ul>
<!-- Dùng for để duyệt trên các nhân viên
thuộc phòng ban hiện tại -->
<c:forEach items="${dept.employees}" var="emp">
<li>
${emp.empName} - (${emp.job})
</li>
</c:forEach>
</ul>
</c:if>
</c:forEach>
</body>
</html>
<c:choose>
<c:when test="${điều kiên 1}">
<%-- Làm gì đó ở đây khi điều kiện 1 đúng --%>
</c:when>
<c:when test="${điều kiên 2}">
<%-- Làm gì đó ở đây khi điều kiện 2 đúng --%>
</c:when>
<c:otherwise>
<%-- Câu lệnh sẽ được thực thi khi tất cả các điều kiện tại <c:when> ở trên sai. --%>
</c:otherwise>
</c:choose>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>c:choose,c:when,c:otherwise example</title>
</head>
<body>
<h2>c:choose,c:when,c:otherwise example</h2>
<c:choose>
<%-- Khi tham số color == 'red' --%>
<c:when test="${param.color=='red'}">
<p style="color:red;">RED COLOR</p>
</c:when>
<%-- Khi tham số color == 'blue' --%>
<c:when test="${param.color=='blue'}">
<p style="color:blue;">BLUE COLOR</p>
</c:when>
<%-- Các trường hợp khác --%>
<c:otherwise>
<b>Other color</b>
</c:otherwise>
</c:choose>
</body>
</html>
escape có ý nghĩa là nếu có các ký tự đặc biệt < > hoặc & nằm ở trong <c:out> khi in ra nó sẽ được chuyển thành < và > và &
- Chẳng hạn:
- <c:out value = "${'<atag> &'}" />
- In ra (Xem trong source của trang trên trình duyệt).
- <atag< &
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>c:out example</title>
</head>
<body>
<h2>c:out example</h2>
<c:out value="${'This is true: 10 > 1 '}" />
<br/>
Tag: <c:out value="${'<atag> , &'}"/>
</body>
</html>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>c:set example</title>
</head>
<body>
<h2>c:set example</h2>
<c:set scope="request" var="greeting" value="Hello every body" />
Greeting: <c:out value="${greeting}"/>
</body>
</html>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>c:remove example</title>
</head>
<body>
<h2>c:remove example</h2>
<c:set scope="request" var="greeting" value="Hello every body" />
Greeting: <c:out value="${greeting}"/>
<br/><br/>
<c:remove scope="request" var="greeting" />
After remove:
<br/>
Greeting: <c:out value="${greeting}"/>
</body>
</html>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>c:catch example</title>
</head>
<body>
<h2>c:catch example</h2>
<c:catch var ="ex">
<%
int a = 100/0;
%>
</c:catch>
<c:if test = "${ex != null}">
Exception : ${ex}
<br />
Message: ${ex.message}
</c:if>
</body>
</html>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>c:forTokens example</title>
</head>
<body>
<h2>c:forTokens example</h2>
<c:forTokens items="Tom,Jerry,Donald" delims="," var="name">
<c:out value="${name}"/><p>
</c:forTokens>
</body>
</html>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>c:url,c:param example</title>
</head>
<body>
<h2>c:url,c:param example</h2>
<c:url value="http://example.com/showPage.jsp" var="myURL">
<c:param name="color" value="red"/>
<c:param name="background" value="blue"/>
</c:url>
<c:out value="${myURL}"/>
</body>
</html>
9. JSTL Formatting and Localization Tags
Tag | Description |
<fmt:formatNumber> | Sử dụng để định dạng số thành một chuỗi theo một quy tắc chỉ định. |
<fmt:parseNumber> |
Phân tích các chuỗi đại diện của một số, tiền tệ, hoặc tỷ lệ phần trăm.
|
<fmt:formatDate> | Định dạng ngày tháng hoặc thời gian sử dụng một mẫu chỉ định. |
<fmt:parseDate> | Phân tích một String mô tả ngày tháng hoặc thời gian. |
<fmt:bundle> | Tải bó nguồn dữ liệu (resource bundle) để sử bởi thẻ body của nó. |
<fmt:setLocale> | Stores the given locale in the locale configuration variable. |
<fmt:setBundle> | Loads a resource bundle and stores it in the named scoped variable or the bundle configuration variable. |
<fmt:timeZone> | Specifies the time zone for any time formatting or parsing actions nested in its body. |
<fmt:setTimeZone> | Stores the given time zone in the time zone configuration variable |
<fmt:message> | To display an internationalized message. |
<fmt:requestEncoding> | Sets the request character encoding |
<fmt:formatNumber
value="<number>"
type="<string>"
pattern="<string>"
currencyCode="<string>"
currencySymbol="<string>"
groupingUsed="<string>"
maxIntegerDigits="<integer>"
minIntegerDigits="<integer>"
maxFractionDigits="<integer>"
minFractionDigits="<integer>"
var="<string>"
scope="<string>"/>
Thuộc tính | Bắt buộc | Kiểu | Mặc định | Mô tả |
value | Yes | Number | Giá trị số, sẽ được định dạng. | |
type | String | number | Xác định xem giá trị được định dạng như một số, tiền tệ hoặc tỷ lệ phần trăm. | |
pattern | String | Khuôn định dạng (Formatting pattern). | ||
currencyCode | String | Lấy theo miền địa phương mặc định. | ||
currencySymbol | String | Lấy theo miền địa phương mặc định. | Các ký hiệu tiền tệ được sử dụng nếu các loại thuộc tính là tiền tệ. | |
groupingUsed | String | true | Có phân tách nhóm hay không khi định dạng đầu ra. | |
maxIntegerDigits | Integer | Số lượng tối đa các chữ số trong phần nguyên. | ||
minIntegerDigits | Integer | Số lượng tối thiểu của các chữ số ở phần nguyên | ||
maxFractionDigits | Integer | Số lượng tối đa các chữ số trong phần thập phân. | ||
minFractionDigits | Integer | Số lượng tối thiểu các chữ số trong phần thập phân. | ||
var | String | In ra màn hinh. | Tên của biến lưu trữ kết quả đã được định dạng. | |
scope | String | Phạm vi của biến lưu trữ trong var. |
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>fmt:formatNumber example</title>
</head>
<body>
<h2>fmt:formatNumber example</h2>
<c:set var="accountBalance" value="12345.6789" />
<h3>accountBalance=<c:out value="${accountBalance}"/></h3>
The Account Balance can be displayed using various ways:
<p>
formatNumber (type='currency'):
<strong>
<fmt:formatNumber value="${accountBalance}" type="currency"/>
</strong>
</p>
<p>
formatNumber (type='number', maxIntegerDigits= '3'):
<strong>
<fmt:formatNumber type="number" maxIntegerDigits="3" value="${accountBalance}" />
</strong>
</p>
<p>
formatNumber (type='number', maxFractionDigits= '3'):
<strong>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${accountBalance}" />
</strong>
</p>
<p>
formatNumber (type='number', groupingUsed= 'false'):
<strong>
<fmt:formatNumber type="number" groupingUsed="false" value="${accountBalance}" />
</strong>
</p>
<p>
formatNumber (type='percent', maxIntegerDigits= '3'):
<strong>
<fmt:formatNumber type="percent" maxIntegerDigits="3" value="${accountBalance}" />
</strong>
</p>
<p>
formatNumber (type='percent', maxIntegerDigits= '10'):
<strong>
<fmt:formatNumber type="percent" minFractionDigits="10" value="${accountBalance}" />
</strong>
</p>
<p>
formatNumber (type='number', pattern= '###.###E0'):
<strong>
<fmt:formatNumber type="number" pattern="###.###E0" value="${accountBalance}" />
</strong>
</p>
<p>
Account Balance in USA (fmt:setLocale value='en_US'):
<br/>
formatNumber (type='currency'):
<fmt:setLocale value="en_US"/>
<strong>
<fmt:formatNumber value="${accountBalance}" type="currency"/>
</strong>
<p>
Account Balance in Canada (fmt:setLocale value='fr_CA'):
<br/>
formatNumber (type='currency'):
<fmt:setLocale value="fr_CA"/>
<strong>
<fmt:formatNumber value="${accountBalance}" type="currency"/>
</strong>
</body>
</html>
<fmt:parseNumber
value="<string>"
type="<string>"
pattern="<string>"
parseLocale="<string>"
integerOnly="<string>"
var="<string>"
scope="<string>"/>
Thuộc tính | Bắt buộc | Kiểu | Mặc định | Mô tả |
value | Yes | String | String được phân tích. | |
type | String | number | Quyết định xem String được cung cấp để phân tích là số, tiền tệ hoặc phần trăm, mặc định là số. | |
pattern | String | Khuôn mẫu của String đã cho trong thuộc tính value được phân tích. | ||
parseLocale | String | locale mặc định | Locale để sử dụng khi phân tích các giá trị bằng cách sử dụng khuôn mẫu (pattern) đã cho. | |
integerOnly | String | false | Chỉ định có hoặc không, chỉ các phần nguyên của giá trị được phân tích. | |
var | String | In ra trang | Tên của biến để lưu trữ kết quả phân tích, kết quả trả về là một số (java.lang.Number). | |
scope | String | page | Phạm vi của var để lưu trữ. |
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>fmt:parseNumber example</title>
</head>
<body>
<h2>fmt:parseNumber example</h2>
<!-- Một chuỗi có định dạng tiền tệ -->
<c:set var="accountBalance" value="$12345.6789" />
<h4>Input <c:out value="${accountBalance}"/></h4>
<fmt:parseNumber var="parsedNumber" type="currency"
parseLocale="en_US"
value="${accountBalance}" />
<p>Account Balance: <c:out value="${parsedNumber}" /></p>
<!-- integerOnly="true" : Chỉ lấy phần nguyên -->
<fmt:parseNumber var="parsedNumber" type="currency"
integerOnly="true" parseLocale="en_US"
value="${accountBalance}" />
<p>Account Balance (without cents): <c:out value="${parsedNumber}" /></p>
</body>
</html>
Name | Required | Type | Default | Description |
value | True | Date | Ngày tháng hoặc thời gian, dùng để định dạng. | |
type | False | String | date | Quyết định xem giá trị trong thuộc tính value là ngày tháng hoặc thời gian, hoặc cả hai. |
dateStyle | False | String | default | Cách định dạng kiểu ngày tháng. Định dạng ngày tháng có thể được xác định với ngữ nghĩa tương tự trong class java.text.DateFormat. |
timeStyle | False | String | default | Cách định dạng kiểu thời gian. Định dạng thời gian có thể được xác định với ngữ nghĩa tương tự trong class java.text.DateFormat. |
pattern | False | String | Mô hình được sử dụng cho ngày tháng và thời gian khi định dạng. | |
timeZone | False | String | Múi giờ mặc định | Múi giờ để đại diện cho thời gian định dạng. |
var | False | String | Ghi ra trang | Tên của các biến để lưu trữ kết quả định dạng. |
scope | False | String | page | Phạm vi lưu trữ của biến var. |
Mã | Mục đích | Ví dụ |
G | Định danh cho kỷ nguyên | AD |
y | Năm | 2002 |
M | Tháng | April & 04 |
d | Ngày trong tháng | 20 |
h | Giờ(0-12) | 12 |
H | Giờ (0 - 23) | 0 |
m | Phút | 45 |
s | Giây | 52 |
S | Mili giây | 970 |
E | Ngày trong tuần | Tuesday |
D | Ngày trong năm | 180 |
F | Ngày của tuần trong tháng | 2 (2nd Wed in month) |
w | Tuần trong năm | 27 |
W | Tuần trong tháng | 2 |
a | Ký hiệu a.m./p.m. | PM |
k | The hour(12-hour time) | 24 |
K | The hour(24-hour time) | 0 |
z | Múi giờ | Central Standard Time |
' | The escape for text | |
'' | The single quote |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>fmt:formatDate example</title>
</head>
<body>
<h2>fmt:formatDate example</h2>
<c:set var="now" value="<%=new java.util.Date()%>" />
<p>
Time (fmt:formatDate type="time"):
<strong>
<fmt:formatDate type="time" value="${now}" />
</strong>
</p>
<p>
Date (fmt:formatDate type="date"):
<strong>
<fmt:formatDate type="date" value="${now}" />
</strong>
</p>
<p>
Date, Time (fmt:formatDate type="both"):
<strong>
<fmt:formatDate type="both" value="${now}" />
</strong>
</p>
<p>
Date, Time Short (fmt:formatDate type="both" dateStyle="short"):
<strong>
<fmt:formatDate type="both" dateStyle="short" timeStyle="short" value="${now}" />
</strong>
</p>
<p>
Date, Time Medium (fmt:formatDate type="both" dateStyle="medium" timeStyle="medium"):
<strong>
<fmt:formatDate type="both" dateStyle="medium" timeStyle="medium" value="${now}" />
</strong>
</p>
<p>
Date, Time Long (fmt:formatDate type="both" dateStyle="long" timeStyle="long"):
<strong>
<fmt:formatDate type="both" dateStyle="long" timeStyle="long" value="${now}" />
</strong>
</p>
<p>
Date, Time (dd-MM-yyyy HH:mm:ss):
<strong>
<fmt:formatDate pattern="dd-MM-yyyy HH:mm:ss" value="${now}" />
</strong>
</p>
<!-- Store in variable -->
<fmt:formatDate pattern="dd-MM-yyyy HH:mm" value="${now}" var="nowString"/>
<p>
Now String (dd-MM-yyyy HH:mm):
<strong>
<c:out value="${nowString}" />
</strong>
</p>
</body>
</html>
<fmt:parseDate
value="<string>"
type="<string>"
dateStyle="<string>"
timeStyle="<string>"
pattern="<string>"
timeZone="<string>"
parseLocale="<string>"
var="<string>"
scope="<string>"/>
Thuộc tính | Bắt buộc | Kiểu dữ liệu | Mặc định | Mô tả |
value | False | String | Nội dung trong body của thẻ | Chuỗi mô tả ngày tháng được phân tích. |
type | False | String | date | Quết định xem giá trị chỉ định trong value chứa ngày tháng (date) hay thời gian (time) hoặc cả hai (both). |
dateStyle | False | String | default | Chỉ định kiểu ngày tháng (SHORT, LONG, FULL, MEDIUM hoặc DEFAULT). |
timeStyle | False | String | default | Chỉ định kiểu thời gian (SHORT, LONG, FULL, MEDIUM hoặc DEFAULT). |
pattern | False | String | Chỉ định khuôn mẫu của chuỗi thời gian sẽ được phân tích. | |
timeZone | False | String | Múi giờ (time zone) mặc định | Múi giờ để diễn giải nếu chuỗi ngày tháng có chứa thông tin thời gian bất kỳ. |
parseLocale | False | String | Miền địa phương (locale) mặc định | Locale whose date time formatting will be used to parse the date time. |
var | False | String | In ra trang | Tên của biến dùng để lưu trữ kết quả phân tích được. |
scope | False | String | page | Phạm vi lưu trữ của biến var. |
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>fmt:parseDate example</title>
</head>
<body>
<h2>fmt:parseDate example</h2>
<!-- Một chuỗi có định dạng ngày tháng thời gian -->
<c:set var="dateTimeString" value="17-11-2015 11:49" />
<h4>
dateTimeString:
<c:out value="${dateTimeString}"/>
</h4>
<!-- Phân tích chuỗi mô tả ngày tháng thời gian lưu vào biến kiểu java.util.Date -->
<fmt:parseDate value="${dateTimeString}"
type="both" var="parsedDatetime" pattern="dd-MM-yyyy HH:mm" />
<p>
The date time after parsing:
<c:out value="${parsedDatetime}" />
</p>
<br/>
<p>
Date only (dd/MM/yyyy):
<fmt:formatDate value="${parsedDatetime}" pattern="dd/MM/yyyy"/>
</body>
</html>
<fmt:bundle baseName="<string>" prefix="<string>"/>
Name | Required | Type | Default | Description |
baseName | True | String | Tên đầy đủ của gói tài nguyên. Giống với quy ước tên đầy đủ của Java ('.' Được sử dụng để tách các tên package). Ví dụ: org.o7planning.MyBundle | |
prefix | False | String | Khi được sử dụng với <fmt:message>, thuộc tính này là một tiền tố, chỉ định giá trị được thêm vào giá trị của key, để mỗi khi sử dụng bạn không cần phải cung cấp tiền tố lặp đi lặp lại. |
login.label.userName=User Name
login.label.password=Password
login.label.userName=Tên \u0111\u0103ng nh\u1EADp
login.label.password=M\u1EADt kh\u1EA9u
Thật không may, khi đọc file .properties thông qua ResourceBundle, nó luôn đọc với mã hóa 'ISO-8859-1'. Bạn không thể sử dụng Unicode trong file properties. Cách tiếp cận thông thường là Escapse các ký tự Unicode trong file Properties. Và khi đó nó sẽ giống dưới đây:
Escapse ===>
- login.label.password=Mật khẩu
- login.label.password=M\u1EADt kh\u1EA9u
Khi bạn gõ chữ Unicode vào file properties trên "Properties File Editor" của Eclipse, nó sẽ tự động thay thế các ký tự không phải ASCII (None-ASCII).
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<c:if test="${not empty param.language}">
<c:set var="language" value="${param.language}" scope="session"/>
</c:if>
<fmt:setLocale value="${language}" />
<fmt:setBundle basename="org.o7planning.bundles.MyBundle" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>fmt:bundle example</title>
</head>
<body>
<h2>fmt:bundle example</h2>
<form action="">
<table border="0">
<tr>
<td>
<fmt:message key="login.label.userName"/>
</td>
<td>
<input type="text" name="userName" />
</td>
</tr>
<tr>
<td>
<fmt:message key="login.label.password"/>
</td>
<td><input type="text" name="userName" /></td>
</tr>
</table>
<input type="submit" value="Submit"/>
</form>
</body>
</html>
Chú ý:<!-- Nếu người dùng đã sử dụng một ngôn ngữ cụ thể khi xem một trang, biến 'language' được sét đặt có phạm vi 'session' giá trị của nó sẽ tồn tại trong suốt quá trình làm việc của người dùng, và website sẽ vẫn hiển thị theo ngôn ngữ đó, nếu trên tham số của trang không chỉ định một ngôn ngữ cụ thể khác. --> <c:set var="language" value="${param.language}" scope="session"/> <fmt:setLocale value="${language}" />
<fmt:message
key="<string>"
bundle="<string>"
var="<string>"
scope="<string>"/>
Thuộc tính | Bắt buộc | Kiểu | Mặc đinh | Mô tả |
key | False | String | Giá trị trong thân thẻ | Khóa của message để tìm kiếm trên bó tài nguyên. |
bundle | False | String | Default bundle | Nguồn tài nguyên để tìm khóa (key). |
var | False | String | Print to Page | Tên của biến, dùng để lưu trữ message tương ứng với key. |
scope | False | String | page | Phạm vi của biến var. |
Hướng dẫn lập trình Java Servlet/JSP
- Cài đặt Tomcat Server cho Eclipse
- Cài đặt Glassfish Web Server trên Windows
- Chạy ứng dụng Java web Maven trên Tomcat Maven Plugin
- Chạy ứng dụng Java Web Maven trên Jetty Maven Plugin
- Ví dụ luồng chạy ngầm trong ứng dụng Java Servlet
- Hướng dẫn lập trình Java Servlet cho người mới bắt đầu
- Hướng dẫn và ví dụ Java Servlet Filter
- Hướng dẫn lập trình Java JSP cho người mới bắt đầu
- Hướng dẫn sử dụng Java JSP Standard Tag Library (JSTL)
- Cài đặt Web Tools Platform cho Eclipse
- Tạo một ứng dụng Login đơn giản và bảo mật với Java Servlet Filter
- Tạo một ứng dụng Java Web đơn giản sử dụng Servlet, JSP và JDBC
- Upload và download file lưu trữ trên ổ cứng với Java Servlet
- Upload và Download file từ Database sử dụng Java Servlet
- Hiển thị ảnh từ database với Java Servlet
- Redirect 301 chuyển hướng vĩnh viễn trong Java Servlet
- Làm sao tự động chuyển hướng http thành https trong ứng dụng Java Web
- Hướng dẫn sử dụng Google reCAPTCHA trong ứng dụng Web Java