JSP-страница Shippinglnfo
После импорта необходимых классов для получения нового объекта класса Custo- merlnfo, связанного с текущим сеансом, используется элемент jsp:useBean. Затем свойства этого элемента с помощью элемента jsp:setProperty устанавливаются равными значениям, введенным в форму на странице Customerlnfo.html. После этого мы получаем класс Order, связанный с текущим сеансом, и вектор Vector, в котором содержится перечень всех заказанных товаров. Потом с помощью скриптлета [Скриптлетом (scriptlet) авторы называют код JSP внутри тегов <%...%>, по-видимому, по аналогии с апплетом и сервлетом (еще одним «изобретением» автора). — Примеч. ред. ] JSP вызываются методы setCustomerlnfo и setltems, которые добавляют соответствующие объекты в объект Order, как показано в листинге 5.17.
Листинг 5.17. Начало кода Shippinglnfo JSP (Shippinglnfo.jsp)
<%@ page import="com.XmlEcomBook.Chap05.*,java.util.*" %>
<jsp:useBean scope="session" id="custInfo" class="CustomerInfo" />
<jsp:setProperty name="custInfo" property="*" />
<jsp:useBean id="order" scope="session" class="Order" />
<jsp:useBean id="theorder" scope="session" class="Vector" />
<% order.setCustomerInfo( custInfo );
order.setItems( theorder );
%>
Затем JSP-страница выдает код HTML, который позволяет пользователю выбрать один из предложенных способов доставки. В этом коде используется объект ShippingCalculator, рассмотренный нами выше в этой главе. Скриптлет, встроенный в код HTML, создает объект ShippingCalculator, а затем с помощью метода getTypes предлагает несколько способов доставки. На этом этапе создается ряд переключателей (radio buttons), по одному на каждый из указанных способов. Это делается с помощью цикла for. Для каждого способа создается элемент input типа radio. Атрибут value (значение) элемента устанавливается с помощью выражения JSP "<t=types[i]X>". Затем такое же выражение используется для отображения этого значения на странице. Другой скриптлет обеспечивает получение данных о стоимости того или иного способа доставки с помощью метода getPrice объекта ShippingCalculator, как показано в листинге 5.18.
Листинг 5.18. Код HTML, который формируется в JSP-странице Shippinglnfo (Shippinglnfo.jsp)
<html>
<head>
<title>Shipping Info</title>
</head>
<body>
<form action="CreditInfo.jsp">
Select a Shipper and Class:<br />
<table>
<% ShippingCalculator calc = new ShippingCalculator( order );
String[] types = calc.getTypes();
for( int i = 0; i < types.length; i++ ) {
%> <tr><td><input type="radio" name="shipperAndClass" value="<%=types[i] %>" /><%=types[i] %></td>
<td><%=calc.getPrice(types[i]) %></td></tr>
<% } %>
</table>
<input type="submit" value="Submit information">
</form>
</body>
</html>