Using a Request Parameter as an Index

A link to a description page for each product is generated using the <c:forEach> action in the main page, shown in Example 10-6. The link includes the request parameter id, specifying the product to display information about. When the user clicks on one of the links, the page shown in Example 10-7 is invoked.

Example 10-7. The product description page (product.jsp)
<%@ page language="java" contentType="text/html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
  
<html>
  <head>
    <title>Product Description</title>
  </head>
  <body bgcolor="white">
  
    <jsp:useBean id="catalog" scope="application"
      class="com.ora.jsp.beans.shopping.CatalogBean"
    />
    <%-- Get the specified ProductBean from the catalog --%>
    <c:set var="product" value="${catalog.productsById[param.id]}" />
    <h1><${fn:escapeXml(product.name)}</h1>
  
    ${fn:escapeXml(product.descr)}
    <p>
    <c:url var="addtocartURL" value="addtocart.jsp">
      <c:param name="id" value="${product.id}" />
    </c:url>
 
    <a href="${addtocartURL}">
      Add this book to the shopping cart</a>
  
  </body>
</html>

A <jsp:useBean> action at the top of Example 10-7 makes the catalog bean available to the page. Since the same action is used in the catalog.jsp page to save the catalog bean in the application scope, it may seem redundant to have it in this page as well. In the normal case, it is. But users may bookmark a page for a specific product and go directly ...

Get JavaServer Pages, 3rd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.