Die Anleitung zu Java JSP Standard Tag Library (JSTL)

1- Die Vorstellung

This document is based on:
  • Eclipse 4.5 Mars
  • Tomcat 8.0

2- Was ist JSTL?

JSP Standard Tag Library (JSTL) ist eine Standard Kartenbibliothek für die Kartenversorgung um die Seite, die Befehlen, die SQL Karten zu kontrollieren
JSTL ist eine Teil von Ja va EE API und in meisten Container Servlet. Aber Sie sollen die JSTL Bibliothek für Ihren Servlet Container herunterladen, um die JSTL in Ihrer JSP Seite zu benutzen. Normalerweise können Sie sie in die Beispielsprojekte finden und Sie können sie benutzen. Sie sollen die Bibliothek in dem Ordner WEB-INF/lib des Project setzen. Wenn Ihr Projekt ein Maven Projekt ist, sollen Sie diese Bibliothek in pom.xml anmelden

3- Die Überblick über die Funktion von JSTL

Wir teilen in 5 Sorten nach der Funktion von JSTL
Functions Description / Declaration
Core Tags Core tags provide support for iteration, conditional logic, catch exception, url, forward or redirect response etc. To use JSTL core tags, you should include it in the JSP page like below.
  • <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Formatting and Localization Tags These tags are provided for formatting of Numbers, Dates and i18n support through locales and resource bundles. You can include these tags in JSP with below syntax:
  • <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
SQL Tags: JSTL SQL Tags provide support for interaction with relational databases such as Oracle, MySql etc. Using SQL tags you can run database queries, you include it in JSP with below syntax:
  • <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
XML Tags XML tags are used to work with XML documents such as parsing XML, transforming XML data and XPath expressions evaluation. Syntax to include XML tags in JSP page is:
  • <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
JSTL Functions Tags JSTL tags provide a number of functions that you 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:
  • <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

4- Die Bibliothek JSTL herunterladen

Zuerst laden Sie die Standard JSTL Bibliothek herunter. Wenn Sie Tomcat Server schon heruntergelagen haben, liegt die File von der Bibliothek in dem Ordner:
  • <Tomcat>/webapps/examples/WEB-INF/lib
    • taglibs-standard-impl-**.jar
    • taglibs-standard-spec-**.jar
Normalerweise haben die Standard Bibliothek den Name von taglibs-standard-spec-**.jar und  taglibs-standard-impl-**.jar. Manchmal haben sie die anderen Namen wie   javax.servlet.jsp.jstl-*.jar, javax.servlet.jsp.jslt-api-*.jar.
JSTL library
(Provided by Apache)
JSTL library
(Provided by Glassfish)
taglibs-standard-spec-*.jar javax.servlet.jsp.jslt-api-*.jar
taglibs-standard-impl-*.jar javax.servlet.jsp.jstl-*.jar
Wenn Sie Maven benutzen:
  • Von Apache versorgt 
<!-- 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>
  • Oder durch Glassfish gebeten:
<!-- 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>
  • Von Sun versorgt (ziemlich alt, selten benutzt werden).
<!-- 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>

Download:

Sie können die Bibliothek herunterladen, die von Apache aus Maven Repository versorgt werden

Standard spect:

Standard impl:

Das Ergebnis Ihres Herunterladen

5- WebApp Project erstellen

Um JSTL zu studieren, sollen Sie ein WebApp Projekt zur Durchführung der Beispiele erstellen
  • File/New/Other..
Geben Sie den Name des Projekt ein:
  • JSTLTutorial
Das Projekt wird erstellt.

6- Die Bibliothek JSTL erklären

Kopieren Sie die JSTL Bibliothek in den Ordner WEB-INF/lib

7- Zur Durchführung von Webapp konfigurieren

Zuerst sollen Sie TomCat Server herunterladen und mit der Eclipse anmelden. Sie können die Hinweise bei ... sehen 
Die Konfiguration zur Funktionierung des Webapp:
Drücken Sie die Rechtmaustaste ins Projekt und wählen Sie die  Properties.
Drücken Sie die Rechtmaustaste ins Projekt und wählen Sie:
  • Run As/Run on Server
Sorgen Sie nicht wenn Sie eine Nachricht wie folgend bekommen. Es ist einfach, weil Ihre Website noch keine Seite haben

8- Einige Klasse zur Teilnahme an der Beispiele

Sie brauchen einige Class und diese Class nehmen an die Beispiele im Dokument teil
Dept.java
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);
  }
}
Emp.java
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 - must have the format '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;
   }

}
DBUtils.java
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();
	}

	// Die Daten in der Database simulieren.
	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);
	}

	// Die Tabelle Department abfragen.
	public static List<Dept> queryDepartments() {
		return DEPARTMENTS;
	}

	// Die Tabelle Employee abfragen.
	// Die Liste der Arbeitnehmer von einer Abteilung (Department) machen.
	public static Set<Emp> queryEmployees(int deptNo) {
		for (Dept dept : DEPARTMENTS) {
			if (deptNo == dept.getDeptNo()) {
				return dept.getEmployees();
			}
		}
		return null;
	}
}

9- JSTL Core Tags

Tag Description
<c:out> To write something in JSP page, you can use EL also with this tag
<c:import> Same as <jsp:include> or include directive
<c:redirect> redirect request to another resource
<c:set> To set the variable value in given scope.
<c:remove> To remove the variable from given scope
<c:catch> To catch the exception and wrap it into an object.
<c:if> Simple conditional logic, used with EL and you can use it to process the exception from <c:catch>
<c:choose> Simple conditional tag that establishes a context for mutually exclusive conditional operations, marked by <c:when> and <c:otherwise>
<c:when> Subtag of <c:choose> that includes its body if its condition evalutes to ‘true’.
<c:otherwise> Subtag of <c:choose> that includes its body if its condition evalutes to ‘false’.
<c:forEach> for iteration over a collection
<c:forTokens> for iteration over tokens separated by a delimiter.
<c:param> used with <c:import> to pass parameters
<c:url> to create a URL with optional query string parameters

9.1- Der Operator EL

Eine nutzliche Funktion von EL ist der Vergleich zwischen die Zählen oder zwischen die Objekte. die Funktion wird für die Wert des anpassen Tag-Attribute benutzt aber wird für das Ergebnis der Vergleich geschrieben (richtig oder falsch) in der Seite JSP. EL bietet die folgenden Vergleichoperator an
Gleich
(equals)
== eq
Nicht gleich
(Not equals)
!= ne
Kleiner
(Less than)
< lt
Großer
(Greater than)
> gt
Kleiner oder gleich
(Less than or equals)
<= le
Großer oder gleich
(Greater than or equals)
>= ge
Der 2. Vergleich soll benutzt werden um die Verirrung zwischen die Zeichen < oder > mit Tag im JSP zu vermeiden. Allerdings sind die Verhalten der 2 Maßnahmen so gleich. Sehen Sie das folgende Beispiel
Der Begriff EL Bedingung Das Ergebnis
Die Zahl kleiner als ${1 < 2} true
Die Zahl größer als ${1 > 2} false
Die Zahl kleiner als
less than)
${1 lt 2} true
Die Zahl größer als
(Greater than)
${1 gt 2} false
Die Zahl kleiner oder gleich ${1 >= 1} true
Die Zahl kleiner oder gleich ${1 <= 1} true
Die Zahl kleiner oder gleich
(Less equals)
${1 le 1} true
Die Zahl größer oder gleich
(Greater than or equal)
${1 ge 1} true
Die Zahl gleich wie ${1 == 1} true
Die Zahl gleich wie
(equal)
${1 eq 1} true
Die Zahl nicht gleich wie ${1 != 2} true
Die Zahl nicht gleich wie
 (not equal)
${1 ne 2} true
Die Buchstabe kleiner als ${'abe' < 'ade'} true
Die Buchstabe größer als ${'abe' > 'ade'} false
Die Buchstabe gleich wie
(Equals)
${'abe' eq 'abe'} true
Die Buchstabe nicht gleich wie ${'abe' ne 'ade'} true
Sie können die Operator && und || ändern.
Der Operator Die Bezeichnung
&& Und
|| Oder
Zum Beispiel
${(guess >= 10)  && (guess <= 20)} ${ guess >= 10  &&  guess <= 20  }
${(guess < 10)  || (guess > 20)} ${ guess < 10  ||  guess > 20 }

9.2- c:forEach

Sehen Sie bitte das erste Beispiel für die Benutzung der Karte <c:forEach> von  JSTL Core. Der Benutzer griff in Servlet   /jstlCoreExample01 ein und die Daten werden in Servlet abgefragt, danach leitet (forward) die Anforderung (request) zur JSP Seite um anzuzeigen. Die Seite JSP benutzt JSTL um die Daten anzuzeigen

Wenn Sie möchten nicht, den Benutzer in die Seite JSP direkt zugreifen, können Sie in dem Verzeichnis WEB-INF oder dem Sub-verzeichnis des Verzeichnis legen

Auf dem Servlet können Sie die Daten in einer Eigenschaft (attribute) einer Anforderung (request) archivieren. Die Daten existiert nur in der Zeitraum der passierenden Anforderung
// Die Daten aus DB ausnehmen.
List<Dept> list = DBUtils.queryDepartments();

// Die Daten in dem Attribute 'departments' von request aufschreiben.
request.setAttribute("departments", list);
Auf die JSP können Sie die Daten benutzen, die auf die Eigenschaften (attribute) einer Anforderung (request) archiviert werden.
<c:forEach items="${requestScope.departments}" var="dept">

  ${dept.deptName}

</c:forEach>


<!-- Or (no need requestScope)  -->

<c:forEach items="${departments}" var="dept">

  ${dept.deptName}

</c:forEach>
Sehen Sie bitte das ganze Beispiel.
JstlCoreEx01Servlet.java
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 {

		// Die Daten aus DB abfragen
		List<Dept> list = DBUtils.queryDepartments();

		// Die Daten in dem Attribute 'departments' von request speichen.
		request.setAttribute("departments", list);

		// Das Objekt RequestDispatcher erstellen um die Anforderung nach jstl_core_example01.jsp weiterzuleiten
		RequestDispatcher dispatcher = getServletContext()
				.getRequestDispatcher("/WEB-INF/jsps/jstl_core_example01.jsp");

		// Die Anforderung weiterleiten um die Daten auf die Seite JSP anzuzeigen
		dispatcher.forward(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
/WEB-INF/jsps/jstl_core_example01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>

 
<%@ 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>

 
<c:forEach items="${departments}" var="dept">
 <h3>${dept.deptName}</h3>
 <ul>
 
   <c:forEach items="${dept.employees}" var="emp">
       <li>
          ${emp.empName} - (${emp.job})
       </li>    
   </c:forEach>
 </ul>

</c:forEach>


</body>
</html>
Führen Sie das Beispiel

9.3- c:if

<c:if> wird benutzt zu prüfen, ob eine Bedingung richtig oder falsch ist. Das folgende Beispiel prüft, ob eine Kollektion das Element oder nicht hat ( ob die Abteilung die Mitarbeiter hat oder nicht). Das Beispiel ist so gleich wie das oben Beispiel aber nur die Anzeige der Abteilung mit der Mitarbeiter
JstlCoreEx02Servlet.java
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 {

		// Die Daten aus DB vorbereiten.
		List<Dept> list = DBUtils.queryDepartments();

		// Die Daten in dem Attribut 'departments' vom request speichen.
		request.setAttribute("departments", list);

		// Das Objekt RequestDispatcher erstellen um die Anforderung nach jstl_core_example02.jsp weiterzuleiten
		RequestDispatcher dispatcher = getServletContext()
				.getRequestDispatcher("/WEB-INF/jsps/jstl_core_example02.jsp");

		// Die Anforderung weiterleiten um auf die Seite JSP anzuzeigen.
		dispatcher.forward(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
/WEB-INF/jsps/jstl_core_example02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>

 
<%@ 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>

 
<c:forEach items="${departments}" var="dept">

<!-- Check if collection is not null or not empty -->
<c:if test="${not empty dept.employees}">
     <h3>${dept.deptName}</h3>
     <ul>
      
       <c:forEach items="${dept.employees}" var="emp">
           <li>
              ${emp.empName} - (${emp.job})
           </li>    
       </c:forEach>
     </ul>
 </c:if>

</c:forEach>


</body>
</html>
Führen Sie das Beispiel:

9.4- c:choose - c:when - c:otherwise

Die Syntax:
<c:choose>
    <c:when test="${condition1}">
       <%-- do something if condition1 is true  --%>
    </c:when>
    <c:when test="${condition2}">
        <%-- do something if condition2 is true  --%>
    </c:when>
    <c:otherwise>
        <%-- Statements which gets executed when all <c:when> tests are false.  --%>
    </c:otherwise>
</c:choose>
Das Beispiel
c_choose.jsp
<%@ 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>
    <%-- When color parameter == 'red' --%>
    <c:when test="${param.color=='red'}">
        <p style="color:red;">RED COLOR</p>
    </c:when>  
    
    <%-- When color parameter == 'blue' --%>
    <c:when test="${param.color=='blue'}">
        <p style="color:blue;">BLUE COLOR</p>
    </c:when>  
     
    <%-- Otherwise --%> 
    <c:otherwise>
        <b>Other color</b>
    </c:otherwise>
</c:choose>

</body>
</html>
Führen Sie das Beispiel

9.5- c:out

Der Tag  <c:out> zeigt das Ergebnis einer Ausdruck an. Es ist ähnlich wie die Arbeitsweise von <% =%>. Der Unterschied ist , dass  <c:out> kann "." zum Zugang des Objekt benutzen. Zum Beispie: Um in  dept.deptName zuzugreifen, sollen Sie nur den Tag  <c:out value = "${dept.deptName}" /> ​​​​​​​benutzen.
<c:out> kann automatisch  escape die Inhalt  XML machen.
Escape hat eine Bedeutung, dass die besondere Zeichen < > oder  &, die in  <c:out> liegen, zur &lt; und  &gt; und &amp; beim Drucken wandeln
  • Zum Beispiel:
    • <c:out value = "${'<atag> &'}" />
  • Drucken (in Source der Seite auf dem Browser sehen).
    • &lt;atag&lt; &amp;
Zum Beispiel:
c_out.jsp
<%@ 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>
Führen Sie das Beispiel durch:

9.6- c:set

c_set.jsp
<%@ 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>
Führen Sie das Beispiel

9.7- c:remove

c_remove.jsp
<%@ 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>
Führen Sie das Beispiel

9.8- c:catch

c_catch.jsp
<%@ 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>
Führen Sie das Beispiel:

9.9- c:forTokens

c_forTokens.jsp
<%@ 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>
Führen Sie das Beispiel

9.10- c:url - c:param

c_url.jsp
<%@ 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>
Führen Sie das Beispiel:

10- JSTL Formatting and Localization Tags

Die Tag mit der JSTL Format (JSTL formatting tags) werden zur Formatierung und Anzeige der Text, die Datum, die Zeite und die Nummer für die internationalen Website (mit der multinationalen Benutzer) benutzt
Tag Description
<fmt:formatNumber> To render numerical value with specific precision or format.
<fmt:parseNumber> Parses the string representation of a number, currency, or percentage.
<fmt:formatDate> Formats a date and/or time using the supplied styles and pattern
<fmt:parseDate> Parses the string representation of a date and/or time
<fmt:bundle> Loads a resource bundle to be used by its tag body.
<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

10.1- fmt:formatNumber

Tag  <fmt:formatNumber> formatiert die Zahl, Prozent und Währung
Die Syntax
<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>"/>
Die Eigenschaft (attribute):

Name

Required

Type

Default

Description

value

Yes

Number

 

Numeric value to be formatted.

type

 

String

number

Determines whether the value is formatted as a number, currency or percentage.

pattern

 

String

 

Formatting pattern.

currencyCode

 

String

From the default locale

The currency code to be used if the type attribute is currency.

currencySymbol

 

String

From the default locale

The currency symbol to be used if the type attribute is currency.

groupingUsed

 

String

true

Whether any grouping separated to be used when formatting the output.

maxIntegerDigits

 

Integer

 

Maximum number of digits in the integer portion.

minIntegerDigits

 

Integer

 

Minimum number of digits in the integer portion.

maxFractionDigits

 

Integer

 

Maximum number of digits in the fraction portion.

minFractionDigits

 

Integer

 

Minimum number of digits in the fraction portion.

var

 

String

Print to page

Name of the variable which stores the formatted result.

scope

 

String

 

Scope to store the var.

fmt_formatNumber.jsp
<%@ 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>
Führen Sie das Beispiel durch

10.2- fmt:parseNumber

Tag  <fmt:parseNumber> analysiert eine Kette zur Bezeichnung einer Zahl, Währung und Prozent
Die Syntax
<fmt:parseNumber
   value="<string>"
   type="<string>"
   pattern="<string>"
   parseLocale="<string>"
   integerOnly="<string>"
   var="<string>"
   scope="<string>"/>
Das Attribute

Name

Required

Type

Default

Description

value

Yes

String

 

String to be parsed.

type

 

String

number

Determines whether the String provided in the value attribute to be parsed as a NUMBER, CURRENRY or PERCENTAGE. Default is NUMBER.

pattern

 

String

 

Pattern on how the given string in the value attribute is parsed.

parseLocale

 

String

Default locale

Locale to use when parsing the value   using the given pattern.

integerOnly

 

String

false

Specifies whether only the integer part of the value is parsed.

var

 

String

Print to page

Name of the variable which stores the result of the parsed value. The result is of type java.lang.Number.

scope

 

String

page

Scope for the var to store.

Nach dem Standard schickt  <fmt: formatNumber> sein Output zum momentanen  JspWriter (um in die Seite zu schreiben). Aber wenn Sie das Attribute var bestimmen, archiviert  <fmt: formatNumber> sein Output in einer Variable, die einen in var Attribute bestimmten Umfang hat. Die Standardwert des Attribute scope ist  'page', Sie können die andere Wert für das Attribute scope bestimmen
fmt_parseNumber.jsp
<%@ 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>
     
   <!-- a String in currency format -->
   <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" : Specifies whether only
              the integer part of the value is parsed. -->
   
   <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>
Führen Sie das Beispiel durch

10.3- fmt:formatDate

Tag  <fmt:formatDate> formatiert die Datum und die Zeit zur einer Kette nach der bestimmten Vorlage
Das Attribute

Name

Required

Type

Default

Description

value

True

Date

 

Date or time to be formatted.

type

False

String

date

Determines whether date or time or both to be formatted in the given date.
(date, time, both)

dateStyle

False

String

default

Formatting style for date. The date format can be specified with similar semantics in class java.text.DateFormat.

timeStyle

False

String

default

Formatting style for time. The time format can be specified with similar semantics in class java.text.DateFormat.

pattern

False

String

 

Pattern to be used for date and time when formatting.

timeZone

False

String

Default time zone

Time zone to represent for the formatted time.

var

False

String

Print to Page

Name of the variable to store the resulted formatted date or time.

scope

False

String

page

Scope to store the var.

Die Zeichen formatieren:
Code Purpose Sample

G

The era designator

AD

y

The year

2002

M

The month

April & 04

d

The day of the month

20

h

The hour(12-hour time)

12

H

The hour(24-hour time)

0

m

The minute

45

s

The second

52

S

The millisecond

970

E

The day of the week

Tuesday

D

The day of the year

180

F

The day of the week in the month

2 (2nd Wed in month)

w

The week in the year

27

W

The week in the month

2

a

The a.m./p.m. indicator

PM

k

The hour(12-hour time)

24

K

The hour(24-hour time)

0

z

The time zone

Central Standard Time

'

 

The escape for text

''

 

The single quote

fmt_formatDate.jsp
<%@ 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>
Führen Sie das Beispiel

10.4- fmt:parseDate

Tag  <fmt:parseDate> analysiert einen String um die Datum oder die Zeit zu bezeichnen
Die Syntax
<fmt:parseDate
   value="<string>"
   type="<string>"
   dateStyle="<string>"
   timeStyle="<string>"
   pattern="<string>"
   timeZone="<string>"
   parseLocale="<string>"
   var="<string>"
   scope="<string>"/>
Das Attribute

Name

Required

Type

Default

Description

value

False

String

Body

The date string to be parsed.

type

False

String

date

Determines whether value specified in the value attribute contains a date, time or both.

dateStyle

False

String

default

Specifies date style (SHORT, LONG, FULL, MEDIUM or DEFAULT).

timeStyle

False

String

default

Specifies time style (SHORT, LONG, FULL, MEDIUM or DEFAULT).

pattern

False

String

 

Specifies the pattern on how the date string to be parsed.

timeZone

False

String

Default time zone

Time zone to interpret if date string contains any time information.

parseLocale

False

String

Default Locale

Locale whose date time formatting will be used to parse the date time.

var

False

String

Print to Page

Name of the variable to store the parsed result.

scope

False

String

page

Scope to store the var.

fmt_parseDate.jsp
<%@ 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>
     <!-- a Date time string -->  
 
     <c:set var="dateTimeString" value="17-11-2015 11:49" />
     <h4>
        dateTimeString:
        <c:out value="${dateTimeString}"/>
     </h4>
 
     <!-- Parsing a date time string, and store in a variable type of 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>
Das Ergebnis von der Durchführung des Beispiel

10.5- fmt:bundle

Tag  <fmt:bundle> ladet die Resourcen Package und wird in die Seite verwendet.  Die Resourcen Package, die der tag ladet, enthaltet die Paaren Schlüssel- Wert (key, value), die für die Internaltionalisierung oder Lokalisierung der Webapplikation verwendet werden. Danach ist der Tag  <fmt:message> für die Anzeige der value mit der entsprechende  key in der Resourcen Package zur Output benutzt
Die Syntax
<fmt:bundle baseName="<string>" prefix="<string>"/>
Das Attribute

Name

Required

Type

Default

Description

baseName

True

String

 

Resource bundle’s fully qualified name. Follows the Java’s fully qualified class name convention (‘.’ is used to separate the package names). For example: org.o7planning.MyBundle.

prefix

False

String

 

When used with <fmt:message> this attribute specifies the value to be prepended in the key value so that each time we do not have to provide the prefix repeatedly.

Benutzen Sie die Tags  <fmt:bundle> und  <fmt:message> um Ihre Websit in die Multisprache anzuzeigen. Sehen Sie bitte das folgende Beispiel:
Sie erstellen 3 file properties in die package org.o7planning.bundles.
Mit der Inhalt
MyBundle.properties & MyBundle_en.properties
login.label.userName=User Name
login.label.password=Password
MyBundle_vi.properties
login.label.userName=Tên \u0111\u0103ng nh\u1EADp
login.label.password=M\u1EADt kh\u1EA9u

Leider unglücklich liest es immer bei dem Lesen von File .properties durch ResourceBundle die Encodeing 'ISO-8859-1'. Sie können Unicode in die File properties nicht benutzen. Der normalen Zugang ist Escapse der Zeichen Unicode in die File Properties. Und dann ist es so gleich wie folgend:

  • login.label.password=Mật khẩu
Escapse ===>
  • login.label.password=M\u1EADt kh\u1EA9u
Wenn Sie Unicode in die File properties auf  "Properties File Editor" von der Eclipse typen, wird es automatisch die Nicht- ASCII (None-ASCII) Zeichen ersetzen.
fmt_bundle.jsp
<%@ 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>
Führen Sie das Beispiel
Beachten Sie
<!--
If the user has used one language on a page,
variable 'language' in 'session' scope, its value will stored in user session,
and the website will be displayed in that language,
if the parameters of the page does not specify different values for it.
-->

<c:set var="language" value="${param.language}" scope="session"/>

<fmt:setLocale value="${language}" />

10.6- fmt:message

Der Tag  <fmt:message> zeigt die Meldungen der Lokalisierung durch den Austausch der Schlüssel (key) durch die aktuellen Nachrichten, die aus der Resourcen File ladet werden, an. Der Tag verbindet dem Tag <fmt:bundle> um die Resourcen Package herunterzuladen
Die Syntax
<fmt:message
   key="<string>"
   bundle="<string>"
   var="<string>"
   scope="<string>"/>
Das Attribute

Name

Required

Type

Default

Description

key

False

String

Body

Key of the message to be looked up from the resource bundle.

bundle

False

String

Default bundle

Which resource bundle the key to be looked up.

var

False

String

Print to Page

Name of the variable to store the localized message.

scope

False

String

page

The scope in which the localized message variable to be stored.

View more categories: