<!--
  Copyright 2004 The Apache Software Foundation

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<%@ taglib prefix="my" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %>
<html>
  <head>
    <title>JSP 2.0 Examples - Book SimpleTag Handler</title>
  </head>
  <body>
    <h1>JSP 2.0 Examples - Book SimpleTag Handler</h1>
    <hr>
    <p>Illustrates a semi-realistic use of SimpleTag and the Expression 
    Language.  First, a &lt;my:findBook&gt; tag is invoked to populate 
    the page context with a BookBean.  Then, the books fields are printed 
    in all caps.</p>
    <br>
    <b><u>Result:</u></b><br>
    <my:findBook var="book"/>
    <table border="1">
        <thead>
	    <td><b>Field</b></td>
	    <td><b>Value</b></td>
	    <td><b>Capitalized</b></td>
	</thead>
	<tr>
	    <td>Title</td>
	    <td>${book.title}</td>
	    <td>${my:caps(book.title)}</td>
	</tr>
	<tr>
	    <td>Author</td>
	    <td>${book.author}</td>
	    <td>${my:caps(book.author)}</td>
	</tr>
	<tr>
	    <td>ISBN</td>
	    <td>${book.isbn}</td>
	    <td>${my:caps(book.isbn)}</td>
	</tr>
    </table>
  </body>
</html>
