SlideShare ist ein Scribd-Unternehmen logo
1 von 91
Downloaden Sie, um offline zu lesen
JavaServer Faces (JSF)
JavaServer Pages (JSP)
ID2212, Network Programming with Java
Lecture 11
Leif Lindbäck
KTH/ICT/SCS
HT 2010
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 2
Content
• Overview of JSF and JSP
• JSF Introduction
• JSF tags
• Managed Beans
• Expression language
• JSP Standard Tag Library (JSTL)
• JSF Navigation and validation
• JSP Overview
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 3
Design of a Java EE application
• This is covered in the exercise
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 4
Two Different View Technologies
JavaServer Faces, JSF
– Newer
– Dynamic views
– Handles non-functional requirements like navigation,
validation, composite views and view templates.
– XHTML pages with JSF-specific tags that are converted to
XHTML tags.
– Handled by the JSF framework that run inside the Servlet
container.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 5
Two Different View Technologies,
Cont'd
• JavaServer Pages, JSP
– Older, left mainly for backwards compatibility
– Dynamic views
– Does not handle non-functional requirements.
– JSP pages with JSP-specific tags. The pages are
translated into Servlets.
– Handled by the Servlet container itself.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 6
Why Use JSF Instead of Plain JSP

Avoid writing infrastructure code for non-
functional requirements like navigation, validation,
composite views and view templates.
• Thoroughly tested and proven to work well.
• Lots of documentation, easy to get help.
• Not using a framework means writing new code
which means introducing new bugs.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 7
Why Use JSF Instead of Plain JSP?
Cont'd
• Non-functional requirements are difficult to code.
• Callback style makes sure all calls to non-
functional requirements code are made at the right
time.
– Handled by the framework.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 8
JavaServer Faces, JSF
javax.faces
JSF Home page:
http://www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html
JSF tag library documentation:
http://download.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 9
A Simple Example

The example has two views.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 10
A Simple Example, Cont'd

The first JSF page, index.xhtml.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 11
A Simple Example, Cont'd

The second JSF page, welcome.xhtml.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 12
A Simple Example, Cont'd

The managed bean, User.java.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 13
Overview of JSF Architecture
• JSF has a component based architecture
– Treats view parts as UI components, not as HTML
elements.
– Maintains an internal component tree.
– Think of it as a Swing or AWT UI.
– index.xhtml in the initial example has three
components. The first, a form, is the ancestor of the
other two, a button and a text field.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 14
Overview of JSF Architecture,
Cont'd
• Each tag in a page has an internal associated tag
handler class inside JSF.
– The tag handler classes are organized according to the
component tree.
• The internal JSF classes handles translation of JSF
tags to HTML tags, interpretation of Http requests,
calls to managed beans etc.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 15
The Phases of a JSF Request
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 16
The Phases of a JSF Request
• Restore View Phase
– Retrieves the component tree (i.e. tree of internal tag
handler classes) for the page if it was displayed
previously. It the page is displayed the first time the
component tree is instead created.
– If there are no Http parameters in the request JSF skips
directly to the Render Response phase.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 17
The Phases of a JSF Request, Cont'd
• Apply Request Values Phase
– The Http request parameters are placed in a hash table
that is passed to all objects in the component tree.
– Each object identifies the parameters belonging to the
component it represents and stores those parameter
values.
– Values stored in objects in the component tree are
called local values.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 18
The Phases of a JSF Request, Cont'd
• Process Validations Phase
– It is possible to attach validators to user editable components (typically text
fields) in a JSF page, using JSF tags.
– Example of validators are that a field is not empty, that a parameter is an
integer, that it is a string of a certain length etc.
– In this phase, the validators are executed to check that the local values are
correct.
– If some validation fails JSF skips to the Render Response phase and
redisplays the current page with error messages about the failed validations.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 19
The Phases of a JSF Request, Cont'd
• Update Model Values Phase
– The local values are used to update managed beans by
invoking setter methods.
– Managed beans and their properties are identified by
their names, in the index.html page in the initial
example the user enters their name in a text field that
has the value user.name. This means the name is
sent to the method setName in the managed bean that
is named user.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 20
The Phases of a JSF Request, Cont'd
• Invoke Application Phase
– Here the method specified by the action attribute of
the component that caused the Http request is called.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 21
The Phases of a JSF Request, Cont'd
• Render Response Phase
– Here the next view is created.
– Everything in the XHTML page except JSF tags is unchanged.
– JSF tags are transformed to XHTML tags by the objects in the
component tree.
– Getter methods in managed beans are called in order to retrieve
values. In the welcome.xhtml page in the initial example the
value user.name is retrieved by a call to the method getName in
the managed bean that is named user.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 22
Tag Libraries in JSF
• HTML
– Used to create HTML elements.
– The recommended prefix is h:
– Some important tags are covered below.
• Core
– Used to add objects , such as validators, listeners and
AJAX support, to HTML elements.
– The recommended prefix is f:
– Example in the slides explaining validation.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 23
Tag Libraries in JSF, Cont'd
• Facelets
– Used to create composite views, e.g. views that have
common components like header, footer and menu,
without using duplicated code.
– The recommended prefix is ui:
– Not covered in this course.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 24
Tag Libraries in JSF, Cont'd
• Composite Components
– Used to create custom components.
– The recommended prefix is composite:
– Not covered in this course.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 25
Tag Libraries in JSF, Cont'd

JSTL (JSP Standard Tag Library) Core
– Utility tags managing for example flow control.
– The recommended prefix is c:
– Some important tags are covered below.
• JSTL (JSP Standard Tag Library) Functions
– Utility functions mainly for handling strings.
– The recommended prefix is fn:
– Some example tags are covered below.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 26
Tag Library Declaration

Tag libraries must be declared in the XHTML
page where they are used.

This is done in the <HTML> tag.

The index.xhtml in the initial example uses
the HTML tag library. It is declared as follows.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 27
Some Tags in the HTML Tag
Library
• head, renders the head of the page.
• body, renders the body of the page.
• form, renders an HTML form.
• inputText, renders an HTML text field.
• inputSecret, renders an HTML password field.
• outputLabel, renders a plain text label for another
component.
• outputText, renders plain text.
• commandButton, renders a submit button.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 28
Attributes for The HTML Tags
• All tags mentioned on the preceding page, except head and body,
have the following attributes.
– id, gives a unique name to the component. All components have a unique
name. It is assigned by JSF if not stated explicitly with the id tag.
– value, specifies the component's currently displayed value. This can be an
expression that refers to a property in a managed bean. If so, the value will
be read from the bean when the component is displayed and stored to the
bean when the component is submitted.
– rendered, a boolean expression that tells whether the component is
displayed or not.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 29
Attributes for The HTML Tags,
Cont'd

The outputLabel tag also has the for
attribute.

Specifies for which other component this component is
a label. The label is normally displayed immediately to
the left of that other component.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 30
Attributes for The HTML Tags,
Cont'd

The commandButton tag also has the action
attribute.

Tells what to do when the user clicks the button.

Can be the name of a XHTML page, without the
.xhtml extension. In this case the specified page is
displayed.

Can also be the name of a method in a managed bean,
in this case that method is invoked.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 31
JSTL (JSP Standard Tag Library)
Core Tags
• choose, an if statement.
<c:choose>
<c:when test="#{condition}">
The condition was true.
</c:when>
<c:otherwise>
The condition was false.
</c:otherwise>
</c:choose>
• If the boolean condition specified in the test
attribute is true, the when block is executed, if not
the otherwise block is executed.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 32
JSTL (JSP Standard Tag Library)
Core Tags, Cont'd
• forEach, a loop statement.
<c:forEach var="element" items="#{myList}"
varStatus="loopCount" >
Element number #{loopCount.count} is #{element}
</c:forEach>
• The var attribute specifies the name of the variable holding the current
element's value. This variable is used when the value shall be displayed.
• The items attribute refers to the collection that shall be iterated over.
• The varStatus attribute defines a variable that holds information like the
current element's index in the collection.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 33
Functions In the JSTL (JSP Standard
Tag Library) Functions Library
• Note that these are functions, not tags.
• contains(str, substr), returns true if
str contains substr.
• startsWith(str, substr, returns true if
str starts with substr.
• length(str), returns the length of str.
• And many more.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 34
JSTL (JSP Standard Tag Library)
Functions Functions, Cont'd
• Example:
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 35
Managed Beans
• Managed beans are plain Java classes.
– Must have a public no-arg constructor.
– Annotated @Named(“myName”), where myName becomes the name of the
bean.
• The beans are managed by the CDI (Context and Dependency Injection)
container.
– Part of Java EE
– Creates and connects objects according to specifications in annotations.
– Supports insertion of decorators and interceptors, which are objects that will be
called before and after method calls.
– Powerful framework, but not covered in this course.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 36
Managed Beans, Cont'd
• All managed beans have a scope which defines their life time. Some scope annotations are:
– ApplicationScoped, the object will exist for the entire application life time.
– SessionScoped, the object will be discarded when the current Http session ends.
– ConversationScoped, a conversation can be started and stopped manually in the
code. If it is not, it has the life time of a Http session. Unlike sessions, conversations are
unique for each browser tab and therefore thread safe.
– RequestScoped, the object will be discarded when the current Http request is
handled.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 37
Managed Beans, Example
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 38
Expression Language
• The expression language is used in dynamic
expressions in JSF (and JSP) pages.
– Stateless, variables can not be declared.
– Statements are written between #{ and }
– The result of an EL statement is a string.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 39
Expression Language, Cont'd
• The syntax is
#{something.somethingElse}, where
something is for example one of the following:
– The name of a managed bean.
– param, which is a java.util.Map containing all
HTTP request parameters. If there are more parameters
with the same name the first is returned.
– paramValues, which is a java.util.Map
containing all HTTP request parameters. No matter how
many parameters there are with the specified name a
java.util.List with all of them is returned.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 40
Expression Language, Cont'd
– header, which is a java.util.Map containing all
HTTP headers. If there are more headers with the same
name the first is returned.
– headerValues, which is a java.util.Map
containing all HTTP headers. No matter how many
headers there are with the specified name a
java.util.List with all of them is returned.
– cookie, which is a java.util.Map containing all
HTTP cookies.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 41
EL, The Operators . and []
• If the operator . is used
(#{something.somethingElse}) the
following must be true.
– something is a java.util.Map or a managed
bean.
– somethingElse is a key in a java.util.Map or
a property in a managed bean or a method in a managed
bean.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 42
EL, The Operators . and [], Cont'd
• If the operator [] is used
(#{something[“somethingElse”]}) the
following must be true.
– something is a java.util.Map, a managed bean, an
array or a java.util.List.
– If somethingElse is a string (surrounded by double
quotes, “”) it must be a key in a java.util.Map, a
property in a managed bean, an index to an array or an
index to a java.util.List.
– If somethingElse is not surrounded by double quotes it
must be a valid EL statement.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 43
EL Examples
• If these are managed beans:
@Named(“person”)
public class PersonBean {
@Inject private DogBean dog;
public DogBean getDog() {
return dog;
}
}
@Named(“dog”)
public class DogBean {
private String name;
public String getName() {
return name;
}
}
• Then it is allowed to write #{person.dog.name} or
#{person[dog["name"]]}.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 44
EL Examples, Cont'd
• Input from an HTML form:
<form>
Address: <input type="text" name="address">
Phone1: <input type="text" name="phone">
Phone2: <input type="text" name="phone">
</form>
• Can be read like this:
The address is #{param.address}
Phone1 is #{param.phone}
Phone1 is #{paramValues.phone[0]}
Phone2 is #{paramValues.phone[1]}
• However, there is seldom any need for this since request
parameters are normally handled by managed beans.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 45
The EL Operators
• Remember that JSF/JSP pages are views and thus not the place for a lot
of calculations.
• Arithmetic
– addition: +
– subtraction: -
– multiplication: *
– division: / or div
– remainder: % or mod
• Logical
– and: && or and
– or: || or or
– not: ! or not
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 46
The EL Operators, Cont'd
• Relational
– equals: == or eq
– not equals: != or ne
– less than: < or lt
– greater than: > or gt
– less than or equal to: <= or le
– greater than or equal to: >= or ge
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 47
EL, Null Values
• Since EL is used for user interfaces it produces the
most user friendly output.
• This means that (like HTML) it tries to silently ignore
errors.
• Null values does not generate any output at all, no
error messages are produced.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 48
Navigation
• What calls should be made to the model and which is the
next view, provided the user has clicked YYY in view ZZZ.
• The next view may differ depending on the outcome of the
call to the model.
• Answers to the above should be stated as a set of navigation
rules that are easy to change.
– The value of the action attribute of the button or link the user
invoked is called the outcome. The navigation handling
depends on the outcome.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 49
Static Navigation
• If the outcome is the name of a XHTML page then
that page is displayed.
– This is called static navigation. The outcome is always
the same.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 50
Dynamic Navigation
• A user action can often have different outcomes,
for example a login attempt might succeed or fail.
• In this case dynamic navigation must be used.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 51
Dynamic Navigation, Cont'd
• Using dynamic navigation the value of the action attribute must be
an expression identifying a method, for example
#{loginManager.validateUser}, assuming that there is a
managed bean named loginManager that has a method called
validateUser.
• The outcome will be the value that is returned by this method. If
the return value is not a String it will be converted to a String
by calling its toString method.
• The outcome could be the name of a XHTML page, just like with
static navigation. If so this page will be displayed.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 52
Dynamic Navigation, Cont'd
• It is not a good design that methods in the model
knows names of XHTML files.
• Therefore we want to have the action handling
method return a logical view name that is mapped
to a XHTML file name.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 53
Dynamic Navigation, Cont'd
• This is achieved by adding a navigation rule to the faces-config.xml file
<navigation-rule>
<from-view-id>/login.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/welcome.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>failure</from-outcome>
<to-view-id>/login.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
• The above means that if an action handling method specified on the login.xhtml
page returns success the welcome.xhtml page is displayed next. If on the other
hand the method returns failure the login.xhtml page is displayed again.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 54
Dynamic Navigation, Cont'd
• Even though the action handling method now returns a logical
outcome, one could argue that we still have some amount of
mixture of business logic and view handling.
• Consider for example a method withdraw in a bank
application. Such a method would normally be void, but would
now instead have to return the String success only to
indicate to JSF that the withdrawal was successful.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 55
Dynamic Navigation, Cont'd
• To avoid this problem we can let the withdraw method
remain void, and instead add another method, success, that
returns true only if the last transaction was successful.
faces-config.xml would then look as follows.
<navigation-rule>
<from-view-id>/withdraw.xhtml</from-view-id>
<navigation-case>
<if>#{bankManager.success}</if>
<to-view-id>/success.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 56
No Matching Navigation Case
• If there is an outcome that does not correspond to
a XHTML file and that has no matching
navigation case, the last page is displayed again.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 57
Validation
• Check data entered by the user.
• If validation fails the same view is shown again
together with an error message.
• Which validations are to be made on what and
which error messages to show if they fail is
specified by attaching validators to user input
components.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 58
Validation, Cont'd
• Validation concerns only checks that can be done
without understanding the meaning of the input.
The check should not include business logic.
– For example that a field is not empty, that it contains an
integer or that it is an email address.
• Since some validation checks, like those
mentioned above, occur frequently they are
predefined in JSF.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 59
Validation Example
<h:inputText id="name" label="Name" value="#{user.name}">
<f:validateRequired/>
</h:inputText>
<h:message for="name"/>
• The validateRequired tag checks that the text
field is not empty.
• The message tag displays the error message if the
validation failed.
• It is possible to customize the error message, but that
is outside this course.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 60
Composite Views
 Views often consist of several parts like header, footer,
navigation menus, main content etc.
 Many of these parts are common for different views.
 In order to avoid duplicated code it must be possible to reuse
both page fragments (html) and page layout (html tables or css).
 Handled by the facelets tag library, but not covered in this
course.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 61
Internationalization (i18n) and
localization (l10n)
• Internationalization means to make it possible to switch
language. To add the possibility to show the user
interface in a new language should only require to write
the words in the new language, not any additional
coding.
• Localization means to add support for a new language.
• Handled by the JSF core tag library, but not covered in
this course.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 62
JSP: JavaServer Pages
javax.servlet.jsp
JSP Home page: http://java.sun.com/products/jsp
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 63
What Is JSP?
• Framework used before JSF.
• A JSP page is written in HTML and translated to a
Servlet by the Servlet container.
• Dynamically-generated web content
– Communicates with model objects written in Java
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 64
The Life Cycle of a JSP
• At the first call:
– The container translates the JSP to a servlet (translation
time)
– The container compiles the servlet (compile time)
– The container instantiates the servlet the same way it
instantiates any servlet.
– The container calls jspInit().
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 65
The Life Cycle of a JSP, Cont'd
• At all calls:
– The container calls _jspService() of the servlet that was
generated at the first call (request time).
• If the JSP is unloaded from the container:
– The container calls jspDestroy().
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 66
A Translated JSP
• The JSP:
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 67
A Translated JSP, Cont'd
• The generated servlet (Tomcat 5.5.15):
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class hw_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
private static java.util.List _jspx_dependants;
public Object getDependants() {
return _jspx_dependants;
}
public void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws java.io.IOException, ServletException {
• The JSP's response is generated in _jspService()
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 68
A Translated JSP, Cont'd
• The generated servlet (cont):
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;
try {
_jspxFactory = JspFactory.getDefaultFactory();
response.setContentType("text/html");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 69
A Translated JSP, Cont'd
• The generated servlet (cont):
out.write("<html>n");
out.write(" <head>n");
out.write(" <title>Hello World!</title>n");
out.write(" </head>n");
out.write("n");
out.write(" <body>n");
out.write(" <h1>Hello World!</h1>n");
out.write(" </body>n");
out.write("</html>n");
out.write("n");
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
out.clearBuffer();
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
}
} finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
• The response is sent.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 70
Where Can I Find the Translated
JSPs?
• Like the translation itself, that is server dependant.
Tomcat (5.5.15) places them in
TOMCAT_HOME/work/Catalina/localhos
t/jsp/org/apache/jsp in a file called
<name of the jsp>_jsp.java, that is
xyz_jsp.java if the jsp is called xyz.jsp.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 71
Actions and Directives
• A directive is an instruction to the container about
the translation of a JSP.
– Does not exist in the translated Java code.
– There are three directives: page, taglib and include.
– Written between <%@ and %>
(for example <%@page ... %>).
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 72
Actions and Directives, Cont'd
• An action is translated into Java code and executed
at request time.
– Syntax: <prefix:action name/>
– Standard actions are defined in the specification and
have the prefix jsp.
– Custom tags are defined by the developer and may have
any prefix (except reserved prefixes like jsp).
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 73
To Include Other Files
• The include directive:
– <%@include file="header.jsp"%>
– The directive is replaced with the content of the
specified file (header.jsp) at translation time.
– Both static (for example HTML files) and dynamic
content (for example other JSP files) can be included.
– The path to the included file is specified relative to the
file with the include directive.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 74
To Include Other Files, Cont'd
• The jsp:include standard action:
– Syntax: <jsp:include page="header.jsp"/>
– The included page is translated to a servlet that is called
(that is, its _jspService() method is called) by the
including servlet at request time.
– Only JSPs can be included.
– The output of the included Servlet is inserted in the
output of the including Servlet.
– The path to the included page is a URL. It is either
relative to the URL of the including page or absolute
starting with the context root of the web application.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 75
To Include Other Files, Cont'd
• It is possible to pass parameters to the included
page if the jsp:include action is used.
– The following code should be placed in the including
page:
<jsp:include page="header.jsp">
<jsp:param name=subTitle" value="A dynamic subtitle"/>
</jsp:include>
– The parameter subTitle will be available as an
HTTP request parameter in the included page.
– It can be output like this:
<h3>${param.subTitle}</h3>
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 76
Error handling
• It is possible to define error pages. If an exception occurs
in a JSP (or servlet) the container forwards the call to the
error page.
– Error pages are defined like this in the deployment descriptor:
<!-- An error page for a Java exception. The call is forwarded
to the error page if the specified exception or a subclass of it
is thrown. -->
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errorpage.jsp</location>
</error-page>
<!-- An error page for an HTTP error -->
<error-page>
<error-code>404</error-code>
<location>/errorpage.jsp</location>
</error-page>
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 77
Error handling, Cont'd
• An example of an error page:
<%@ page isErrorPage="true" %>
<html>
<head>
<title>This page handles exceptions</title>
</head>
<body>
<h1>This page handles exceptions</h1>
<p>An ${pageContext.exception} was thrown. Its message was:
${pageContext.exception.message}</p>
</body>
</html>
• This must always be written in an error page.
• This is the exception object that was thrown.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 78
NEVER EVER Write Java code in a
JSP
• There are ways to insert Java code directly in a
JSP.
– Possible only for backwards compatibility
• NEVER EVER do that!
– Gives high coupling and low cohesion.
– Makes the code inflexible, difficult to understand and
hard to maintain.
– Forces web page designers to learn Java programming.
• Use EL and custom tags instead.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 79
The <%@taglib%> directive
• Used to declare custom tags that are used in a JSP
• Syntax:
<%@ taglib prefix="myTags"
uri="uri/of/my/tld” %>
– The prefix attribute specifies the prefix part of the tag
(<myTags:someTag/>).
– The uri attribute tells the name of a TLD describing
the tags.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 80
To Write Your Own Tags
• There are many useful tags in JSTL.
• There are many third party taglibs, for example
Jakarta Tagblibs.
• Sometimes we still have to write new tags, there
are two types:
– Tag files look like ordinary JSPs but are called like
custom tags.
– Tag handlers are written in Java code.
– Only the latter are covered here.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 81
A Simple Tag
• The Java tag handler:
package se.kth.timetags;
import java.io.IOException;
import java.util.Date;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
/**
* A tag that displays the current date and time.
*/
public class DateTimeTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
out.print(new Date());
}
}
– The tag handler class must extend
javax.servlet.jsp.tagext.SimpleTagSupport
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 82
A Simple Tag, Cont'd
• The Java tag handler:
package se.kth.timetags;
import java.io.IOException;
import java.util.Date;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
/**
* A tag that displays the current date and time.
*/
public class DateTimeTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
out.print(new Date());
}
}
– The output of public void doTag() will be inserted in the
JSP's response.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 83
A Simple Tag, Cont'd
• The tag library descriptor:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web
jsptaglibrary_2_0.xsd" version="2.0"
>
<tlib-version>1.0</tlib-version>
<uri>timeTags</uri>
<tag>
<name>date-time</name>
<tag-class>course6b4056.timetags.DateTimeTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
– Simply copy this part.
– The version of the tag. Any value can be used.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 84
A Simple Tag, Cont'd
• The tag library descriptor:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web
jsptaglibrary_2_0.xsd" version="2.0"
>
<tlib-version>1.0</tlib-version>
<uri>timeTags</uri>
<tag>
<name>date-time</name>
<tag-class>course6b4056.timetags.DateTimeTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
– The name of the taglib. Must be the same as the uri in
the taglib directive in the JSP. The uri is only a string, it
is not interpreted in any way.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 85
A Simple Tag, Cont'd
• The tag library descriptor:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web
jsptaglibrary_2_0.xsd" version="2.0"
>
<tlib-version>1.0</tlib-version>
<uri>timeTags</uri>
<tag>
<name>date-time</name>
<tag-class>course6b4056.timetags.DateTimeTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
– The name of the tag.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 86
A Simple Tag, Cont'd
• The tag library descriptor:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web
jsptaglibrary_2_0.xsd" version="2.0"
>
<tlib-version>1.0</tlib-version>
<uri>timeTags</uri>
<tag>
<name>date-time</name>
<tag-class>course6b4056.timetags.DateTimeTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
– The name of the Java tag handler.
– The allowed content of the tags body.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 87
A Simple Tag, Cont'd
• Possible values of body-content in the tld:
– empty means the tag must not have a body.
– tagdependent means the body content is not interpreted
by the JSP. Its content is handled as plain text.
– scriptless means the body may contain EL but not Java
code. EL statements are interpreted.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 88
A Simple Tag, Cont'd
• The JSP:
<%@ taglib uri="timeTags" prefix="time" %>
<html>
<head>
<title>Clock</title>
</head>
<body>
<h1>Clock</h1>
<h3><time:date-time/>
</body>
</html>
– The name of the tld. Must be the same as in uri in the
TLD. The uri is not interpreted in any way.
– The prefix in the JSP.
– The name of the tag. Must be the same as in name in
the TLD.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 89
A Simple Tag, Cont'd
• The compiled Java class should be placed under
WEB-INF/classes in a directory matching the
package name. The example class is in the
package se.kth.timetags and should thus be
placed in the directory
WEB-INF/classes/se/kth/timetags
• The TLD should be placed in WEB-INF.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 90
Where do the container look for tag
libraries?
• A tag library and its tag handlers are defined by
the TLD.
• To execute a tag the container must find a TLD
with the same uri as in the taglib directive in the
JSP with the tag.
Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 91
Where do the container look for tag
libraries? Cont'd
• The container looks for TLDs in these places:
– WEB-INF
– Directories under WEB-INF
– META-INF in jar files in WEB-INF/lib
– Directories under META-INF in jar files in WEB-
INF/lib

Weitere ähnliche Inhalte

Was ist angesagt?

Lecture 8 Enterprise Java Beans (EJB)
Lecture 8  Enterprise Java Beans (EJB)Lecture 8  Enterprise Java Beans (EJB)
Lecture 8 Enterprise Java Beans (EJB)Fahad Golra
 
S313557 java ee_programming_model_explained_dochez
S313557 java ee_programming_model_explained_dochezS313557 java ee_programming_model_explained_dochez
S313557 java ee_programming_model_explained_dochezJerome Dochez
 
Java IO, Serialization
Java IO, Serialization Java IO, Serialization
Java IO, Serialization Hitesh-Java
 
JSP Processing
JSP ProcessingJSP Processing
JSP ProcessingSadhana28
 
SCWCD : Java server pages CHAP : 9
SCWCD : Java server pages  CHAP : 9SCWCD : Java server pages  CHAP : 9
SCWCD : Java server pages CHAP : 9Ben Abdallah Helmi
 
Java Course 14: Beans, Applets, GUI
Java Course 14: Beans, Applets, GUIJava Course 14: Beans, Applets, GUI
Java Course 14: Beans, Applets, GUIAnton Keks
 
Spring - Part 3 - AOP
Spring - Part 3 - AOPSpring - Part 3 - AOP
Spring - Part 3 - AOPHitesh-Java
 
Ejb3.1 for the starter
Ejb3.1 for the starterEjb3.1 for the starter
Ejb3.1 for the startershohancse
 

Was ist angesagt? (18)

Lecture 8 Enterprise Java Beans (EJB)
Lecture 8  Enterprise Java Beans (EJB)Lecture 8  Enterprise Java Beans (EJB)
Lecture 8 Enterprise Java Beans (EJB)
 
S313557 java ee_programming_model_explained_dochez
S313557 java ee_programming_model_explained_dochezS313557 java ee_programming_model_explained_dochez
S313557 java ee_programming_model_explained_dochez
 
Enterprise JavaBeans(EJB)
Enterprise JavaBeans(EJB)Enterprise JavaBeans(EJB)
Enterprise JavaBeans(EJB)
 
Java IO, Serialization
Java IO, Serialization Java IO, Serialization
Java IO, Serialization
 
JSP Processing
JSP ProcessingJSP Processing
JSP Processing
 
SCWCD : Java server pages CHAP : 9
SCWCD : Java server pages  CHAP : 9SCWCD : Java server pages  CHAP : 9
SCWCD : Java server pages CHAP : 9
 
EJB3 Basics
EJB3 BasicsEJB3 Basics
EJB3 Basics
 
Java Course 14: Beans, Applets, GUI
Java Course 14: Beans, Applets, GUIJava Course 14: Beans, Applets, GUI
Java Course 14: Beans, Applets, GUI
 
Introduction to EJB
Introduction to EJBIntroduction to EJB
Introduction to EJB
 
Jsp sasidhar
Jsp sasidharJsp sasidhar
Jsp sasidhar
 
Jsf+ejb 50
Jsf+ejb 50Jsf+ejb 50
Jsf+ejb 50
 
Spring - Part 3 - AOP
Spring - Part 3 - AOPSpring - Part 3 - AOP
Spring - Part 3 - AOP
 
Struts,Jsp,Servlet
Struts,Jsp,ServletStruts,Jsp,Servlet
Struts,Jsp,Servlet
 
Ejb3 Presentation
Ejb3 PresentationEjb3 Presentation
Ejb3 Presentation
 
Java EE EJB Applications
Java EE EJB ApplicationsJava EE EJB Applications
Java EE EJB Applications
 
Ejb3.1 for the starter
Ejb3.1 for the starterEjb3.1 for the starter
Ejb3.1 for the starter
 
Unit 4 web technology uptu
Unit 4 web technology uptuUnit 4 web technology uptu
Unit 4 web technology uptu
 
Java Beans
Java BeansJava Beans
Java Beans
 

Andere mochten auch

Andere mochten auch (20)

4. jsp
4. jsp4. jsp
4. jsp
 
xampp_server
xampp_serverxampp_server
xampp_server
 
Joomla!: phpMyAdmin for Beginners
Joomla!: phpMyAdmin for BeginnersJoomla!: phpMyAdmin for Beginners
Joomla!: phpMyAdmin for Beginners
 
Jsp Presentation +Mufix "3"
Jsp Presentation +Mufix "3"Jsp Presentation +Mufix "3"
Jsp Presentation +Mufix "3"
 
Using XAMPP
Using XAMPPUsing XAMPP
Using XAMPP
 
phpMyAdmin con Xampp
phpMyAdmin con XamppphpMyAdmin con Xampp
phpMyAdmin con Xampp
 
Introducing the MySQL Workbench CASE tool
Introducing the MySQL Workbench CASE toolIntroducing the MySQL Workbench CASE tool
Introducing the MySQL Workbench CASE tool
 
Jsp
JspJsp
Jsp
 
Jsp/Servlet
Jsp/ServletJsp/Servlet
Jsp/Servlet
 
Java/Servlet/JSP/JDBC
Java/Servlet/JSP/JDBCJava/Servlet/JSP/JDBC
Java/Servlet/JSP/JDBC
 
MySQL Database with phpMyAdmin
MySQL Database with  phpMyAdminMySQL Database with  phpMyAdmin
MySQL Database with phpMyAdmin
 
Introduction to xampp
Introduction to xamppIntroduction to xampp
Introduction to xampp
 
Jsp
JspJsp
Jsp
 
Real world attenuation of foam earplugs- smith
Real world attenuation of foam earplugs- smithReal world attenuation of foam earplugs- smith
Real world attenuation of foam earplugs- smith
 
Calendari Ecològic 2017
Calendari Ecològic 2017Calendari Ecològic 2017
Calendari Ecològic 2017
 
Puntuaciones provisionales
Puntuaciones provisionalesPuntuaciones provisionales
Puntuaciones provisionales
 
Edsel ayes-20-year-marketing-plan
Edsel ayes-20-year-marketing-planEdsel ayes-20-year-marketing-plan
Edsel ayes-20-year-marketing-plan
 
Permendikbud no-104-tahun-2014
Permendikbud no-104-tahun-2014Permendikbud no-104-tahun-2014
Permendikbud no-104-tahun-2014
 
The life in the Cloud
The life in the CloudThe life in the Cloud
The life in the Cloud
 
botox London
botox Londonbotox London
botox London
 

Ähnlich wie JSF2 and JSP

AK 5 JSF 21 july 2008
AK 5 JSF   21 july 2008AK 5 JSF   21 july 2008
AK 5 JSF 21 july 2008gauravashq
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Fahad Golra
 
Java Server Faces (JSF) - Basics
Java Server Faces (JSF) - BasicsJava Server Faces (JSF) - Basics
Java Server Faces (JSF) - BasicsBG Java EE Course
 
Lap trinh web [Slide jsp]
Lap trinh web [Slide jsp]Lap trinh web [Slide jsp]
Lap trinh web [Slide jsp]Tri Nguyen
 
JSP Components and Directives.pdf
JSP Components and Directives.pdfJSP Components and Directives.pdf
JSP Components and Directives.pdfArumugam90
 
Atul & shubha goswami jsp
Atul & shubha goswami jspAtul & shubha goswami jsp
Atul & shubha goswami jspAtul Giri
 
JSF and Seam
JSF and SeamJSF and Seam
JSF and Seamyuvalb
 
J2EE - Practical Overview
J2EE - Practical OverviewJ2EE - Practical Overview
J2EE - Practical OverviewSvetlin Nakov
 
Lec5 ecom fall16_modified7_november16
Lec5 ecom fall16_modified7_november16Lec5 ecom fall16_modified7_november16
Lec5 ecom fall16_modified7_november16Zainab Khallouf
 
Introduction to jsf2
Introduction to jsf2Introduction to jsf2
Introduction to jsf2Rajiv Gupta
 

Ähnlich wie JSF2 and JSP (20)

Introduction to jsf 2
Introduction to jsf 2Introduction to jsf 2
Introduction to jsf 2
 
AK 5 JSF 21 july 2008
AK 5 JSF   21 july 2008AK 5 JSF   21 july 2008
AK 5 JSF 21 july 2008
 
AK 4 JSF
AK 4 JSFAK 4 JSF
AK 4 JSF
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)
 
Facelets
FaceletsFacelets
Facelets
 
Java Server Faces (JSF) - Basics
Java Server Faces (JSF) - BasicsJava Server Faces (JSF) - Basics
Java Server Faces (JSF) - Basics
 
JSF 2.0 Preview
JSF 2.0 PreviewJSF 2.0 Preview
JSF 2.0 Preview
 
jsf2 Notes
jsf2 Notesjsf2 Notes
jsf2 Notes
 
10 jsp-scripting-elements
10 jsp-scripting-elements10 jsp-scripting-elements
10 jsp-scripting-elements
 
J2 Ee Overview
J2 Ee OverviewJ2 Ee Overview
J2 Ee Overview
 
Lap trinh web [Slide jsp]
Lap trinh web [Slide jsp]Lap trinh web [Slide jsp]
Lap trinh web [Slide jsp]
 
JSP Components and Directives.pdf
JSP Components and Directives.pdfJSP Components and Directives.pdf
JSP Components and Directives.pdf
 
Atul & shubha goswami jsp
Atul & shubha goswami jspAtul & shubha goswami jsp
Atul & shubha goswami jsp
 
JSF and Seam
JSF and SeamJSF and Seam
JSF and Seam
 
J2EE - Practical Overview
J2EE - Practical OverviewJ2EE - Practical Overview
J2EE - Practical Overview
 
Lec5 ecom fall16_modified7_november16
Lec5 ecom fall16_modified7_november16Lec5 ecom fall16_modified7_november16
Lec5 ecom fall16_modified7_november16
 
Introduction to jsf2
Introduction to jsf2Introduction to jsf2
Introduction to jsf2
 
Jsp
JspJsp
Jsp
 
JSP.pptx
JSP.pptxJSP.pptx
JSP.pptx
 
Jsp advance part i
Jsp advance part iJsp advance part i
Jsp advance part i
 

Kürzlich hochgeladen

CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 

Kürzlich hochgeladen (20)

CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 

JSF2 and JSP

  • 1. JavaServer Faces (JSF) JavaServer Pages (JSP) ID2212, Network Programming with Java Lecture 11 Leif Lindbäck KTH/ICT/SCS HT 2010
  • 2. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 2 Content • Overview of JSF and JSP • JSF Introduction • JSF tags • Managed Beans • Expression language • JSP Standard Tag Library (JSTL) • JSF Navigation and validation • JSP Overview
  • 3. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 3 Design of a Java EE application • This is covered in the exercise
  • 4. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 4 Two Different View Technologies JavaServer Faces, JSF – Newer – Dynamic views – Handles non-functional requirements like navigation, validation, composite views and view templates. – XHTML pages with JSF-specific tags that are converted to XHTML tags. – Handled by the JSF framework that run inside the Servlet container.
  • 5. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 5 Two Different View Technologies, Cont'd • JavaServer Pages, JSP – Older, left mainly for backwards compatibility – Dynamic views – Does not handle non-functional requirements. – JSP pages with JSP-specific tags. The pages are translated into Servlets. – Handled by the Servlet container itself.
  • 6. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 6 Why Use JSF Instead of Plain JSP  Avoid writing infrastructure code for non- functional requirements like navigation, validation, composite views and view templates. • Thoroughly tested and proven to work well. • Lots of documentation, easy to get help. • Not using a framework means writing new code which means introducing new bugs.
  • 7. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 7 Why Use JSF Instead of Plain JSP? Cont'd • Non-functional requirements are difficult to code. • Callback style makes sure all calls to non- functional requirements code are made at the right time. – Handled by the framework.
  • 8. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 8 JavaServer Faces, JSF javax.faces JSF Home page: http://www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html JSF tag library documentation: http://download.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/
  • 9. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 9 A Simple Example  The example has two views.
  • 10. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 10 A Simple Example, Cont'd  The first JSF page, index.xhtml.
  • 11. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 11 A Simple Example, Cont'd  The second JSF page, welcome.xhtml.
  • 12. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 12 A Simple Example, Cont'd  The managed bean, User.java.
  • 13. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 13 Overview of JSF Architecture • JSF has a component based architecture – Treats view parts as UI components, not as HTML elements. – Maintains an internal component tree. – Think of it as a Swing or AWT UI. – index.xhtml in the initial example has three components. The first, a form, is the ancestor of the other two, a button and a text field.
  • 14. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 14 Overview of JSF Architecture, Cont'd • Each tag in a page has an internal associated tag handler class inside JSF. – The tag handler classes are organized according to the component tree. • The internal JSF classes handles translation of JSF tags to HTML tags, interpretation of Http requests, calls to managed beans etc.
  • 15. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 15 The Phases of a JSF Request
  • 16. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 16 The Phases of a JSF Request • Restore View Phase – Retrieves the component tree (i.e. tree of internal tag handler classes) for the page if it was displayed previously. It the page is displayed the first time the component tree is instead created. – If there are no Http parameters in the request JSF skips directly to the Render Response phase.
  • 17. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 17 The Phases of a JSF Request, Cont'd • Apply Request Values Phase – The Http request parameters are placed in a hash table that is passed to all objects in the component tree. – Each object identifies the parameters belonging to the component it represents and stores those parameter values. – Values stored in objects in the component tree are called local values.
  • 18. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 18 The Phases of a JSF Request, Cont'd • Process Validations Phase – It is possible to attach validators to user editable components (typically text fields) in a JSF page, using JSF tags. – Example of validators are that a field is not empty, that a parameter is an integer, that it is a string of a certain length etc. – In this phase, the validators are executed to check that the local values are correct. – If some validation fails JSF skips to the Render Response phase and redisplays the current page with error messages about the failed validations.
  • 19. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 19 The Phases of a JSF Request, Cont'd • Update Model Values Phase – The local values are used to update managed beans by invoking setter methods. – Managed beans and their properties are identified by their names, in the index.html page in the initial example the user enters their name in a text field that has the value user.name. This means the name is sent to the method setName in the managed bean that is named user.
  • 20. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 20 The Phases of a JSF Request, Cont'd • Invoke Application Phase – Here the method specified by the action attribute of the component that caused the Http request is called.
  • 21. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 21 The Phases of a JSF Request, Cont'd • Render Response Phase – Here the next view is created. – Everything in the XHTML page except JSF tags is unchanged. – JSF tags are transformed to XHTML tags by the objects in the component tree. – Getter methods in managed beans are called in order to retrieve values. In the welcome.xhtml page in the initial example the value user.name is retrieved by a call to the method getName in the managed bean that is named user.
  • 22. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 22 Tag Libraries in JSF • HTML – Used to create HTML elements. – The recommended prefix is h: – Some important tags are covered below. • Core – Used to add objects , such as validators, listeners and AJAX support, to HTML elements. – The recommended prefix is f: – Example in the slides explaining validation.
  • 23. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 23 Tag Libraries in JSF, Cont'd • Facelets – Used to create composite views, e.g. views that have common components like header, footer and menu, without using duplicated code. – The recommended prefix is ui: – Not covered in this course.
  • 24. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 24 Tag Libraries in JSF, Cont'd • Composite Components – Used to create custom components. – The recommended prefix is composite: – Not covered in this course.
  • 25. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 25 Tag Libraries in JSF, Cont'd  JSTL (JSP Standard Tag Library) Core – Utility tags managing for example flow control. – The recommended prefix is c: – Some important tags are covered below. • JSTL (JSP Standard Tag Library) Functions – Utility functions mainly for handling strings. – The recommended prefix is fn: – Some example tags are covered below.
  • 26. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 26 Tag Library Declaration  Tag libraries must be declared in the XHTML page where they are used.  This is done in the <HTML> tag.  The index.xhtml in the initial example uses the HTML tag library. It is declared as follows. <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
  • 27. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 27 Some Tags in the HTML Tag Library • head, renders the head of the page. • body, renders the body of the page. • form, renders an HTML form. • inputText, renders an HTML text field. • inputSecret, renders an HTML password field. • outputLabel, renders a plain text label for another component. • outputText, renders plain text. • commandButton, renders a submit button.
  • 28. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 28 Attributes for The HTML Tags • All tags mentioned on the preceding page, except head and body, have the following attributes. – id, gives a unique name to the component. All components have a unique name. It is assigned by JSF if not stated explicitly with the id tag. – value, specifies the component's currently displayed value. This can be an expression that refers to a property in a managed bean. If so, the value will be read from the bean when the component is displayed and stored to the bean when the component is submitted. – rendered, a boolean expression that tells whether the component is displayed or not.
  • 29. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 29 Attributes for The HTML Tags, Cont'd  The outputLabel tag also has the for attribute.  Specifies for which other component this component is a label. The label is normally displayed immediately to the left of that other component.
  • 30. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 30 Attributes for The HTML Tags, Cont'd  The commandButton tag also has the action attribute.  Tells what to do when the user clicks the button.  Can be the name of a XHTML page, without the .xhtml extension. In this case the specified page is displayed.  Can also be the name of a method in a managed bean, in this case that method is invoked.
  • 31. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 31 JSTL (JSP Standard Tag Library) Core Tags • choose, an if statement. <c:choose> <c:when test="#{condition}"> The condition was true. </c:when> <c:otherwise> The condition was false. </c:otherwise> </c:choose> • If the boolean condition specified in the test attribute is true, the when block is executed, if not the otherwise block is executed.
  • 32. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 32 JSTL (JSP Standard Tag Library) Core Tags, Cont'd • forEach, a loop statement. <c:forEach var="element" items="#{myList}" varStatus="loopCount" > Element number #{loopCount.count} is #{element} </c:forEach> • The var attribute specifies the name of the variable holding the current element's value. This variable is used when the value shall be displayed. • The items attribute refers to the collection that shall be iterated over. • The varStatus attribute defines a variable that holds information like the current element's index in the collection.
  • 33. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 33 Functions In the JSTL (JSP Standard Tag Library) Functions Library • Note that these are functions, not tags. • contains(str, substr), returns true if str contains substr. • startsWith(str, substr, returns true if str starts with substr. • length(str), returns the length of str. • And many more.
  • 34. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 34 JSTL (JSP Standard Tag Library) Functions Functions, Cont'd • Example:
  • 35. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 35 Managed Beans • Managed beans are plain Java classes. – Must have a public no-arg constructor. – Annotated @Named(“myName”), where myName becomes the name of the bean. • The beans are managed by the CDI (Context and Dependency Injection) container. – Part of Java EE – Creates and connects objects according to specifications in annotations. – Supports insertion of decorators and interceptors, which are objects that will be called before and after method calls. – Powerful framework, but not covered in this course.
  • 36. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 36 Managed Beans, Cont'd • All managed beans have a scope which defines their life time. Some scope annotations are: – ApplicationScoped, the object will exist for the entire application life time. – SessionScoped, the object will be discarded when the current Http session ends. – ConversationScoped, a conversation can be started and stopped manually in the code. If it is not, it has the life time of a Http session. Unlike sessions, conversations are unique for each browser tab and therefore thread safe. – RequestScoped, the object will be discarded when the current Http request is handled.
  • 37. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 37 Managed Beans, Example
  • 38. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 38 Expression Language • The expression language is used in dynamic expressions in JSF (and JSP) pages. – Stateless, variables can not be declared. – Statements are written between #{ and } – The result of an EL statement is a string.
  • 39. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 39 Expression Language, Cont'd • The syntax is #{something.somethingElse}, where something is for example one of the following: – The name of a managed bean. – param, which is a java.util.Map containing all HTTP request parameters. If there are more parameters with the same name the first is returned. – paramValues, which is a java.util.Map containing all HTTP request parameters. No matter how many parameters there are with the specified name a java.util.List with all of them is returned.
  • 40. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 40 Expression Language, Cont'd – header, which is a java.util.Map containing all HTTP headers. If there are more headers with the same name the first is returned. – headerValues, which is a java.util.Map containing all HTTP headers. No matter how many headers there are with the specified name a java.util.List with all of them is returned. – cookie, which is a java.util.Map containing all HTTP cookies.
  • 41. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 41 EL, The Operators . and [] • If the operator . is used (#{something.somethingElse}) the following must be true. – something is a java.util.Map or a managed bean. – somethingElse is a key in a java.util.Map or a property in a managed bean or a method in a managed bean.
  • 42. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 42 EL, The Operators . and [], Cont'd • If the operator [] is used (#{something[“somethingElse”]}) the following must be true. – something is a java.util.Map, a managed bean, an array or a java.util.List. – If somethingElse is a string (surrounded by double quotes, “”) it must be a key in a java.util.Map, a property in a managed bean, an index to an array or an index to a java.util.List. – If somethingElse is not surrounded by double quotes it must be a valid EL statement.
  • 43. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 43 EL Examples • If these are managed beans: @Named(“person”) public class PersonBean { @Inject private DogBean dog; public DogBean getDog() { return dog; } } @Named(“dog”) public class DogBean { private String name; public String getName() { return name; } } • Then it is allowed to write #{person.dog.name} or #{person[dog["name"]]}.
  • 44. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 44 EL Examples, Cont'd • Input from an HTML form: <form> Address: <input type="text" name="address"> Phone1: <input type="text" name="phone"> Phone2: <input type="text" name="phone"> </form> • Can be read like this: The address is #{param.address} Phone1 is #{param.phone} Phone1 is #{paramValues.phone[0]} Phone2 is #{paramValues.phone[1]} • However, there is seldom any need for this since request parameters are normally handled by managed beans.
  • 45. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 45 The EL Operators • Remember that JSF/JSP pages are views and thus not the place for a lot of calculations. • Arithmetic – addition: + – subtraction: - – multiplication: * – division: / or div – remainder: % or mod • Logical – and: && or and – or: || or or – not: ! or not
  • 46. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 46 The EL Operators, Cont'd • Relational – equals: == or eq – not equals: != or ne – less than: < or lt – greater than: > or gt – less than or equal to: <= or le – greater than or equal to: >= or ge
  • 47. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 47 EL, Null Values • Since EL is used for user interfaces it produces the most user friendly output. • This means that (like HTML) it tries to silently ignore errors. • Null values does not generate any output at all, no error messages are produced.
  • 48. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 48 Navigation • What calls should be made to the model and which is the next view, provided the user has clicked YYY in view ZZZ. • The next view may differ depending on the outcome of the call to the model. • Answers to the above should be stated as a set of navigation rules that are easy to change. – The value of the action attribute of the button or link the user invoked is called the outcome. The navigation handling depends on the outcome.
  • 49. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 49 Static Navigation • If the outcome is the name of a XHTML page then that page is displayed. – This is called static navigation. The outcome is always the same.
  • 50. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 50 Dynamic Navigation • A user action can often have different outcomes, for example a login attempt might succeed or fail. • In this case dynamic navigation must be used.
  • 51. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 51 Dynamic Navigation, Cont'd • Using dynamic navigation the value of the action attribute must be an expression identifying a method, for example #{loginManager.validateUser}, assuming that there is a managed bean named loginManager that has a method called validateUser. • The outcome will be the value that is returned by this method. If the return value is not a String it will be converted to a String by calling its toString method. • The outcome could be the name of a XHTML page, just like with static navigation. If so this page will be displayed.
  • 52. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 52 Dynamic Navigation, Cont'd • It is not a good design that methods in the model knows names of XHTML files. • Therefore we want to have the action handling method return a logical view name that is mapped to a XHTML file name.
  • 53. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 53 Dynamic Navigation, Cont'd • This is achieved by adding a navigation rule to the faces-config.xml file <navigation-rule> <from-view-id>/login.xhtml</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/welcome.xhtml</to-view-id> </navigation-case> <navigation-case> <from-outcome>failure</from-outcome> <to-view-id>/login.xhtml</to-view-id> </navigation-case> </navigation-rule> • The above means that if an action handling method specified on the login.xhtml page returns success the welcome.xhtml page is displayed next. If on the other hand the method returns failure the login.xhtml page is displayed again.
  • 54. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 54 Dynamic Navigation, Cont'd • Even though the action handling method now returns a logical outcome, one could argue that we still have some amount of mixture of business logic and view handling. • Consider for example a method withdraw in a bank application. Such a method would normally be void, but would now instead have to return the String success only to indicate to JSF that the withdrawal was successful.
  • 55. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 55 Dynamic Navigation, Cont'd • To avoid this problem we can let the withdraw method remain void, and instead add another method, success, that returns true only if the last transaction was successful. faces-config.xml would then look as follows. <navigation-rule> <from-view-id>/withdraw.xhtml</from-view-id> <navigation-case> <if>#{bankManager.success}</if> <to-view-id>/success.xhtml</to-view-id> </navigation-case> </navigation-rule>
  • 56. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 56 No Matching Navigation Case • If there is an outcome that does not correspond to a XHTML file and that has no matching navigation case, the last page is displayed again.
  • 57. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 57 Validation • Check data entered by the user. • If validation fails the same view is shown again together with an error message. • Which validations are to be made on what and which error messages to show if they fail is specified by attaching validators to user input components.
  • 58. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 58 Validation, Cont'd • Validation concerns only checks that can be done without understanding the meaning of the input. The check should not include business logic. – For example that a field is not empty, that it contains an integer or that it is an email address. • Since some validation checks, like those mentioned above, occur frequently they are predefined in JSF.
  • 59. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 59 Validation Example <h:inputText id="name" label="Name" value="#{user.name}"> <f:validateRequired/> </h:inputText> <h:message for="name"/> • The validateRequired tag checks that the text field is not empty. • The message tag displays the error message if the validation failed. • It is possible to customize the error message, but that is outside this course.
  • 60. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 60 Composite Views  Views often consist of several parts like header, footer, navigation menus, main content etc.  Many of these parts are common for different views.  In order to avoid duplicated code it must be possible to reuse both page fragments (html) and page layout (html tables or css).  Handled by the facelets tag library, but not covered in this course.
  • 61. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 61 Internationalization (i18n) and localization (l10n) • Internationalization means to make it possible to switch language. To add the possibility to show the user interface in a new language should only require to write the words in the new language, not any additional coding. • Localization means to add support for a new language. • Handled by the JSF core tag library, but not covered in this course.
  • 62. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 62 JSP: JavaServer Pages javax.servlet.jsp JSP Home page: http://java.sun.com/products/jsp
  • 63. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 63 What Is JSP? • Framework used before JSF. • A JSP page is written in HTML and translated to a Servlet by the Servlet container. • Dynamically-generated web content – Communicates with model objects written in Java
  • 64. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 64 The Life Cycle of a JSP • At the first call: – The container translates the JSP to a servlet (translation time) – The container compiles the servlet (compile time) – The container instantiates the servlet the same way it instantiates any servlet. – The container calls jspInit().
  • 65. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 65 The Life Cycle of a JSP, Cont'd • At all calls: – The container calls _jspService() of the servlet that was generated at the first call (request time). • If the JSP is unloaded from the container: – The container calls jspDestroy().
  • 66. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 66 A Translated JSP • The JSP: <html> <head> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> </body> </html>
  • 67. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 67 A Translated JSP, Cont'd • The generated servlet (Tomcat 5.5.15): package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class hw_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static java.util.List _jspx_dependants; public Object getDependants() { return _jspx_dependants; } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { • The JSP's response is generated in _jspService()
  • 68. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 68 A Translated JSP, Cont'd • The generated servlet (cont): JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out;
  • 69. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 69 A Translated JSP, Cont'd • The generated servlet (cont): out.write("<html>n"); out.write(" <head>n"); out.write(" <title>Hello World!</title>n"); out.write(" </head>n"); out.write("n"); out.write(" <body>n"); out.write(" <h1>Hello World!</h1>n"); out.write(" </body>n"); out.write("</html>n"); out.write("n"); } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) out.clearBuffer(); if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context); } } } • The response is sent.
  • 70. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 70 Where Can I Find the Translated JSPs? • Like the translation itself, that is server dependant. Tomcat (5.5.15) places them in TOMCAT_HOME/work/Catalina/localhos t/jsp/org/apache/jsp in a file called <name of the jsp>_jsp.java, that is xyz_jsp.java if the jsp is called xyz.jsp.
  • 71. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 71 Actions and Directives • A directive is an instruction to the container about the translation of a JSP. – Does not exist in the translated Java code. – There are three directives: page, taglib and include. – Written between <%@ and %> (for example <%@page ... %>).
  • 72. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 72 Actions and Directives, Cont'd • An action is translated into Java code and executed at request time. – Syntax: <prefix:action name/> – Standard actions are defined in the specification and have the prefix jsp. – Custom tags are defined by the developer and may have any prefix (except reserved prefixes like jsp).
  • 73. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 73 To Include Other Files • The include directive: – <%@include file="header.jsp"%> – The directive is replaced with the content of the specified file (header.jsp) at translation time. – Both static (for example HTML files) and dynamic content (for example other JSP files) can be included. – The path to the included file is specified relative to the file with the include directive.
  • 74. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 74 To Include Other Files, Cont'd • The jsp:include standard action: – Syntax: <jsp:include page="header.jsp"/> – The included page is translated to a servlet that is called (that is, its _jspService() method is called) by the including servlet at request time. – Only JSPs can be included. – The output of the included Servlet is inserted in the output of the including Servlet. – The path to the included page is a URL. It is either relative to the URL of the including page or absolute starting with the context root of the web application.
  • 75. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 75 To Include Other Files, Cont'd • It is possible to pass parameters to the included page if the jsp:include action is used. – The following code should be placed in the including page: <jsp:include page="header.jsp"> <jsp:param name=subTitle" value="A dynamic subtitle"/> </jsp:include> – The parameter subTitle will be available as an HTTP request parameter in the included page. – It can be output like this: <h3>${param.subTitle}</h3>
  • 76. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 76 Error handling • It is possible to define error pages. If an exception occurs in a JSP (or servlet) the container forwards the call to the error page. – Error pages are defined like this in the deployment descriptor: <!-- An error page for a Java exception. The call is forwarded to the error page if the specified exception or a subclass of it is thrown. --> <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/errorpage.jsp</location> </error-page> <!-- An error page for an HTTP error --> <error-page> <error-code>404</error-code> <location>/errorpage.jsp</location> </error-page>
  • 77. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 77 Error handling, Cont'd • An example of an error page: <%@ page isErrorPage="true" %> <html> <head> <title>This page handles exceptions</title> </head> <body> <h1>This page handles exceptions</h1> <p>An ${pageContext.exception} was thrown. Its message was: ${pageContext.exception.message}</p> </body> </html> • This must always be written in an error page. • This is the exception object that was thrown.
  • 78. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 78 NEVER EVER Write Java code in a JSP • There are ways to insert Java code directly in a JSP. – Possible only for backwards compatibility • NEVER EVER do that! – Gives high coupling and low cohesion. – Makes the code inflexible, difficult to understand and hard to maintain. – Forces web page designers to learn Java programming. • Use EL and custom tags instead.
  • 79. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 79 The <%@taglib%> directive • Used to declare custom tags that are used in a JSP • Syntax: <%@ taglib prefix="myTags" uri="uri/of/my/tld” %> – The prefix attribute specifies the prefix part of the tag (<myTags:someTag/>). – The uri attribute tells the name of a TLD describing the tags.
  • 80. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 80 To Write Your Own Tags • There are many useful tags in JSTL. • There are many third party taglibs, for example Jakarta Tagblibs. • Sometimes we still have to write new tags, there are two types: – Tag files look like ordinary JSPs but are called like custom tags. – Tag handlers are written in Java code. – Only the latter are covered here.
  • 81. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 81 A Simple Tag • The Java tag handler: package se.kth.timetags; import java.io.IOException; import java.util.Date; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; /** * A tag that displays the current date and time. */ public class DateTimeTag extends SimpleTagSupport { public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); out.print(new Date()); } } – The tag handler class must extend javax.servlet.jsp.tagext.SimpleTagSupport
  • 82. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 82 A Simple Tag, Cont'd • The Java tag handler: package se.kth.timetags; import java.io.IOException; import java.util.Date; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; /** * A tag that displays the current date and time. */ public class DateTimeTag extends SimpleTagSupport { public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); out.print(new Date()); } } – The output of public void doTag() will be inserted in the JSP's response.
  • 83. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 83 A Simple Tag, Cont'd • The tag library descriptor: <?xml version="1.0" encoding="ISO-8859-1" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web jsptaglibrary_2_0.xsd" version="2.0" > <tlib-version>1.0</tlib-version> <uri>timeTags</uri> <tag> <name>date-time</name> <tag-class>course6b4056.timetags.DateTimeTag</tag-class> <body-content>empty</body-content> </tag> </taglib> – Simply copy this part. – The version of the tag. Any value can be used.
  • 84. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 84 A Simple Tag, Cont'd • The tag library descriptor: <?xml version="1.0" encoding="ISO-8859-1" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web jsptaglibrary_2_0.xsd" version="2.0" > <tlib-version>1.0</tlib-version> <uri>timeTags</uri> <tag> <name>date-time</name> <tag-class>course6b4056.timetags.DateTimeTag</tag-class> <body-content>empty</body-content> </tag> </taglib> – The name of the taglib. Must be the same as the uri in the taglib directive in the JSP. The uri is only a string, it is not interpreted in any way.
  • 85. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 85 A Simple Tag, Cont'd • The tag library descriptor: <?xml version="1.0" encoding="ISO-8859-1" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web jsptaglibrary_2_0.xsd" version="2.0" > <tlib-version>1.0</tlib-version> <uri>timeTags</uri> <tag> <name>date-time</name> <tag-class>course6b4056.timetags.DateTimeTag</tag-class> <body-content>empty</body-content> </tag> </taglib> – The name of the tag.
  • 86. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 86 A Simple Tag, Cont'd • The tag library descriptor: <?xml version="1.0" encoding="ISO-8859-1" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web jsptaglibrary_2_0.xsd" version="2.0" > <tlib-version>1.0</tlib-version> <uri>timeTags</uri> <tag> <name>date-time</name> <tag-class>course6b4056.timetags.DateTimeTag</tag-class> <body-content>empty</body-content> </tag> </taglib> – The name of the Java tag handler. – The allowed content of the tags body.
  • 87. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 87 A Simple Tag, Cont'd • Possible values of body-content in the tld: – empty means the tag must not have a body. – tagdependent means the body content is not interpreted by the JSP. Its content is handled as plain text. – scriptless means the body may contain EL but not Java code. EL statements are interpreted.
  • 88. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 88 A Simple Tag, Cont'd • The JSP: <%@ taglib uri="timeTags" prefix="time" %> <html> <head> <title>Clock</title> </head> <body> <h1>Clock</h1> <h3><time:date-time/> </body> </html> – The name of the tld. Must be the same as in uri in the TLD. The uri is not interpreted in any way. – The prefix in the JSP. – The name of the tag. Must be the same as in name in the TLD.
  • 89. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 89 A Simple Tag, Cont'd • The compiled Java class should be placed under WEB-INF/classes in a directory matching the package name. The example class is in the package se.kth.timetags and should thus be placed in the directory WEB-INF/classes/se/kth/timetags • The TLD should be placed in WEB-INF.
  • 90. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 90 Where do the container look for tag libraries? • A tag library and its tag handlers are defined by the TLD. • To execute a tag the container must find a TLD with the same uri as in the taglib directive in the JSP with the tag.
  • 91. Lecture 11: JavaServer Faces (JSF), JavaServer Pages (JSP) 91 Where do the container look for tag libraries? Cont'd • The container looks for TLDs in these places: – WEB-INF – Directories under WEB-INF – META-INF in jar files in WEB-INF/lib – Directories under META-INF in jar files in WEB- INF/lib