advanced web technologies 8) including jstl in jsf · 2 expression language ithe jstl tag...

25
Berner Fachhochschule-Technik und Informatik Advanced Web Technologies 8) Including JSTL in JSF Source: http://www.coreservlets.com/JSF-Tutorial/ Fall Semester 09-10 Advanced Web Technologies 8) Including JSTL in JSF 1

Upload: others

Post on 29-May-2020

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Berner Fachhochschule-Technik und Informatik

Advanced Web Technologies8) Including JSTL in JSF

Source:http://www.coreservlets.com/JSF-Tutorial/

Fall Semester 09-10

Advanced Web Technologies 8) Including JSTL in JSF

1

Page 2: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Using the JSP Standard Tag Library(JSTL) with JSF

� Overview and InstallationInstalling JSTL

� Iteration Tags

� Logic TagsThe “if” TagThe “choose” Tag

� Other Tags

Advanced Web Technologies 8) Including JSTL in JSF

2

Page 3: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Overview and Installation

Advanced Web Technologies 8) Including JSTL in JSF

Overview and Installation 3

Page 4: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

JSTL Overview

I JSTL was based on the Struts looping and logic tagsI JSTL is not part of the JSP 1.2 or 2.0 Specs

• It is a separate specification that requires a separate download• Available only in servers that support servlets 2.3 and JSP 1.2

or later. Cannot be retrofitted into JSP 1.1.

I The JSTL expression language is part of JSP 2.0, JSP2.1, and JSF

I The JSTL Specification is available in PDF• http://jcp.org/en/jsr/detail?id=52

Advanced Web Technologies 8) Including JSTL in JSF

Overview and Installation 4

Page 5: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Installing JSTLI Some servers come with JSTL preinstalled

• E.g., MyFaces

I Official reference implementation• http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html

I JSTL (like JSP) is a specification, not animplementation• Code is portable but not all versions are equal• Speed, tools, and development environments vary

I To install:• Download 1.1 zip file• Unzip into directory of your choice.• Copy install_dir/lib/jstl.jar andinstall_dir/lib/standard.jar to the WEB-INF/libdirectory of your Web application

Advanced Web Technologies 8) Including JSTL in JSF

Overview and Installation: Installing JSTL 5

Page 6: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

The JSTL Expression Language

I Accessed via ${expression}I Similar to JavaScript and XPathI Provides shorthand notation to access:

• Attributes of standard servlet objects• Bean properties• Map, List, and Array elements

I Is standard part of JSP 2.0 and 2.1• In JSTL, EL can be used only in attributes of JSTL tags• In JSP 2.0, the EL can be used anywhere• web.xml element and page directive attribute let you disable

the EL for backward compatibility

I Covered in separate lecture

Advanced Web Technologies 8) Including JSTL in JSF

Overview and Installation: Installing JSTL 6

Page 7: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Problems with JSTL 1.0 and the JSP2 Expression Language

I The JSTL tag attributes are not defined withrtexprvalue="true"• So JSTL can parse EL, even in non-JSP-2 environments

I In JSP 2, the EL is evaluated before tags• So EL in JSTL attributes would be evaluated by JSP 2, not by

JSTL, which is an illegal rtexprvalue

I So, you must disable the regular EL• Use web.xml declaration that refers to servlets 2.3; Disables

the regular EL in the entire Web app• Use jsp-property-group in web.xml; Disables the regular

EL in selected pages• Use <%@ page isELIgnored="true" %>; Disables the

regular EL in current page

Advanced Web Technologies 8) Including JSTL in JSF

Overview and Installation: Installing JSTL 7

Page 8: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Iteration Tags

Advanced Web Technologies 8) Including JSTL in JSF

Iteration Tags 8

Page 9: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Looping Tags: Summary

I Looping with explicit numeric values

<c:forEach var=”name” begin=”x” end=”y” step=”z”>Blah, blah <c:out value=”${name}”/>

</c:forEach>

I Looping over data structures• Can loop down arrays, strings, collections, maps

<c:forEach var=”name”items=”array−or−collection”>

Blah, blah <c:out value=”${name}”/></c:forEach>

I Looping down delimited strings• forTokens

Advanced Web Technologies 8) Including JSTL in JSF

Iteration Tags 9

Page 10: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Looping Tags: MotivationI JSP without JSTL

<UL> <%for(int i=0; i<messages.length; i++) {

String message = messages[i];% ><LI><%= message %><% } %></UL>

I JSP with JSTL

<UL><c:forEach var=”message” items=”${messages}”>

<LI> <c:out value=”${message}”/> </LI></c:forEach>

</UL>

Advanced Web Technologies 8) Including JSTL in JSF

Iteration Tags 10

Page 11: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Looping with Simple Numeric Values

<%@ taglib prefix=”c”uri=”http://java.sun.com/jsp/jstl/core”%>

<UL><c:forEach var=”i” begin=”1” end=”10”>

<LI><c:out value=”${i}”/></c:forEach></UL>

Advanced Web Technologies 8) Including JSTL in JSF

Iteration Tags 11

Page 12: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Looping with a Designated Step Size

<%@ taglib prefix=”c”uri=”http://java.sun.com/jsp/jstl/core”%>

<UL><c:forEach

var=”seconds”begin=”0”end=”${pageContext.session.maxInactiveInterval}”step=”100”>

<LI><c:out value=”${seconds}”/> seconds.</c:forEach>

<LI>Timeout exceeded.</UL>

Advanced Web Technologies 8) Including JSTL in JSF

Iteration Tags 12

Page 13: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Looping Down Arrays<% String[] words = { ”foo”, ”bar”, ”baz”};

pageContext.setAttribute(”words”, words); %><%@ taglib prefix=”c”

uri=”http://java.sun.com/jsp/jstl/core”%><H2>Key Words:</H2><UL><c:forEach var=”word” items=”${words}”>

<LI><c:out value=”${word}”/></c:forEach></UL><H2>Values of the test Parameter:</H2><UL><c:forEach var=”val” items=”${paramValues.test}”>

<LI><c:out value=”${val}”/></c:forEach></UL>

Advanced Web Technologies 8) Including JSTL in JSF

Iteration Tags 13

Page 14: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Looping Down Comma-DelimitedStrings

<%@ taglib prefix=”c”uri=”http://java.sun.com/jsp/jstl/core”%>

<UL><c:forEach

var=”country”items=”Australia,Canada,Japan,Philippines,USA”><LI><c:out value=”${country}”/>

</c:forEach></UL>

Advanced Web Technologies 8) Including JSTL in JSF

Iteration Tags 14

Page 15: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Looping Down Arbitrarily-DelimitedStrings

<%@ taglib prefix=”c”uri=”http://java.sun.com/jsp/jstl/core” %>

<UL><c:forTokens var=”color”

items=”(red (orange) yellow)(green)((blue) violet)”delims=”()”>

<LI><c:out value=”${color}”/></c:forTokens></UL>

I Point: forTokens built on forEach: you can build your owncustom tags based on JSTL tags

Advanced Web Technologies 8) Including JSTL in JSF

Iteration Tags 15

Page 16: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Logic Tags

Advanced Web Technologies 8) Including JSTL in JSF

Logic Tags 16

Page 17: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Conditional Evaluation TagsI One choice: if

<c:if test=”${someTest}”>Content

</c:if>

I Lots of choices: choose

<c:choose><c:when test=”test1”>Content1</c:when><c:when test=”test2”>Content2</c:when>...<c:when test=”testN”>ContentN</c:when><c:otherwise>Default Content</c:otherwise>

</c:choose>

I Caution: resist use of business logic!

Advanced Web Technologies 8) Including JSTL in JSF

Logic Tags 17

Page 18: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

The ”if” Tag

<%@ taglib prefix=”c”uri=”http://java.sun.com/jsp/jstl/core”%>

<UL><c:forEach var=”i” begin=”1” end=”10”>

<LI><c:out value=”${i}”/><c:if test=”${i > 7}”>(greater than 7)</c:if>

</c:forEach></UL>

Advanced Web Technologies 8) Including JSTL in JSF

Logic Tags: The “if” Tag 18

Page 19: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

The ”choose” Tag<%@ taglib prefix=”c”

uri=”http://java.sun.com/jsp/jstl/core”%><UL><c:forEach var=”i” begin=”1” end=”10”>

<LI><c:out value=”${i}”/><c:choose>

<c:when test=”${i < 4}”> (small)</c:when><c:when test=”${i < 8}”> (medium)</c:when><c:otherwise> (large)</c:otherwise>

</c:choose></c:forEach></UL>

Advanced Web Technologies 8) Including JSTL in JSF

Logic Tags: The “choose” Tag 19

Page 20: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

URL-Handling Tags

I <c:import>

• Read content from arbitrary URLs• Insert into page• Store in variable• Or make accessible via a reader• Unlike <jsp:include>, not restricted to own system

I <c:redirect>• Redirects response to specified URL

I <c:param>• Encodes a request parameter and adds it to a URL• May be used within body of <c:import> or <c:redirect>

Advanced Web Technologies 8) Including JSTL in JSF

Other Tags 20

Page 21: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Formatting Tags

I <fmt:formatNumber>• Formats a numeric value as a number, currency value, or

percent, in a locale-specific manner

I <fmt:parseNumber>• Reads string representations of number, currency value, or

percent

I <fmt:formatDate>

I <fmt:parseDate>

I <fmt:timeZone>

I <fmt:setTimeZone>

Advanced Web Technologies 8) Including JSTL in JSF

Other Tags 21

Page 22: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Internationalization (I18N) Tags

I <fmt:setLocale>• Sets Locale

I <fmt:setBundle>

I <fmt:bundle>I <fmt:message>

• Retrieves localized message from a resource bundle

I <fmt:param>

Advanced Web Technologies 8) Including JSTL in JSF

Other Tags 22

Page 23: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Summary

I JSTL is similar to the old Struts looping and logic tags, butbetter

I JSTL is standardized, but not a standard part of JSP

• It is supposed to be included with all JSF implementations

I Supports a concise expression language

•• Lets you access bean properties and implicit objects• EL is standard part of JSP 2.0, JSP 2.1, and JSF

I Looping tags

• Explicit numeric values• Arrays, collections, maps, strings, etc.

I Conditional evaluation tags

• Single options• Multiple options

Advanced Web Technologies 8) Including JSTL in JSF

Other Tags 23

Page 24: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

Conclusion

I Java Server Faces help a lot in separating the differentlayers.

I We are forced to separate ”business logic” from”presentation layer”

I Hello World is much more complicated than with PHPI Reusability of components is high

• Components of the business logic can be reused in anyapplication (for instance web service, or java application)

• Presentation layer components may be reused for anotherproject totaly different.

Advanced Web Technologies 8) Including JSTL in JSF

Other Tags 24

Page 25: Advanced Web Technologies 8) Including JSTL in JSF · 2 Expression Language IThe JSTL tag attributes are not de ned with rtexprvalue="true" So JSTL can parse EL, even in non-JSP-2

References

I http://www.coreservlets.com/JSF-Tutorial/

Advanced Web Technologies 8) Including JSTL in JSF

Other Tags 25