background image

Tag Collaboration

<< Using JSTL | Core Tag Library >>
<< Using JSTL | Core Tag Library >>

Tag Collaboration

In addition to declaring the tag libraries, tutorial examples access the JSTL API and
implementation. In the Application Server, the JSTL TLDs and libraries are distributed in the
archive as-install/lib/appserv-jstl.jar. This library is automatically loaded into the
classpath of all web applications running on the Application Server, so you don't need to add it
to your web application.
Tag Collaboration
Tags usually collaborate with their environment in implicit and explicit ways. Implicit
collaboration is done by means of a well-defined interface that allows nested tags to work
seamlessly with the ancestor tag that exposes that interface. The JSTL conditional tags employ
this mode of collaboration.
Explicit collaboration happens when a tag exposes information to its environment. JSTL tags
expose information as JSP EL variables; the convention followed by JSTL is to use the name var
for any tag attribute that exports information about the tag. For example, the forEach tag
exposes the current item of the shopping cart it is iterating over in the following way:
<c:forEach var=
"item" items="${sessionScope.cart.items}">
...
</c:forEach>
In situations where a tag exposes more than one piece of information, the name var is used for
the primary piece of information being exported, and an appropriate name is selected for any
other secondary piece of information exposed. For example, iteration status information is
exported by the forEach tag through the attribute status.
When you want to use an EL variable exposed by a JSTL tag in an expression in the page's
scripting language (see
Chapter 9, "Scripting in JSP Pages"
), you use the standard JSP element
jsp:useBean
to declare a scripting variable.
For example,
tut-install/javaeetutorial5/examples/web/bookstore4/web/books/bookshowcart.jsp
removes a book from a shopping cart using a scriptlet. The ID of the book to be removed is
passed as a request parameter. The value of the request parameter is first exposed as an EL
variable (to be used later by the JSTL sql:query tag) and then is declared as a scripting variable
and passed to the cart.remove method:
<c:set var=
"bookId" value="${param.Remove}"/>
<jsp:useBean id=
"bookId" type="java.lang.String" />
<% cart.remove(bookId); %>
<sql:query var=
"books"
dataSource=
"${applicationScope.bookDS}">
select * from PUBLIC.books where id = ?
<sql:param value=
"${bookId}" />
</sql:query>
Using JSTL
The Java EE 5 Tutorial · September 2007
204