Использование объектов Cartltem и ShoppingCart
Как показано в листинге 4.14, CatalogBean создает объект Cartltem для некоторого товара на основе информации, содержащейся в экземпляре cat класса TheCatalog.
Метод doCartLnst, приведенный в листинге 4 14, контролирует вывод всех объектов Cartltem, содержащихся в экземпляре класса ShoppingCart Форматирование таблицы осуществляется методом doShowCart класса CatalogServ Метод doCartList обеспечивает отображение каждого заказанного товара в отдельной строке таблицы HTML, а также отображение количества заказанных экземпляров (numeberOrdered) для каждого из них Типичная страница, показывающая содержимое корзины покупателя, представлена на рис 4 6
Листинг 4.14. Методы CatalogBean, связанные с объектом ShoppingCart (CatalogBean.java)
public CartItem createCartItem( String id ){
Element pE = cat.getProductElByID( id );
return new CartItem( pE );
}
// we are in a <table>.. </table> pf was created with setOutput
public void doCartList( PrintWriter out,
ShoppingCart cart ){
Vector v = cart.getItems();
int ct = v.size();
for( int i = 0 ; i < ct ; i++ ){
CartItem item = (CartItem)v.elementAt(i);
out.print("<tr><td>");
String id = item.getId();
out.print( pf.doListOutput( cat.getProductElByID(id)));
out.print( "</td><td>");
out.print( "Number ordered: " + item.getNumberOrdered() );
out.print( "</td></tr>\r\n");
}
}

Рис. 4.6. Отображение содержимого корзины покупателя
Сложное форматирование при представлении полной информации о товаре (как показано на рис. 4 4 и 4 5) контролируется методом doFuTIItem, код которого приведен в листинге 4 15 Исходно мы строим таблицу с четырьмя или тремя ячейками в зависимости от наличия или отсутствия изображения товара В этой таблице содержатся сведения о товаре, его изображение (если оно есть), название и цена, а также количество заказанных экземпляров (если покупатель решил приобрести этот товар) Создается объект ProductFormatter, задающий стиль отображения всей этой информации о товаре, то есть стиль всех фрагментов текста, которые содержатся в документе XML, описывающем данный товар
+ " value=\"setcart\" >");
if( ci.getNumberOrdered() == 0 ){
out.print("<input type=\"HIDDEN\" name=\"itemct\" value=\"1\" >");
out.print("<input type=\"SUBMIT\" value=\"" );
out.print(" Add this item to cart\" >");
}
else {
out.print( "<i>To change the number ordered,
enter a new number here "
+ "and click the Change button.</i><br />" );
out.print("<input type=\"TEXT\" name=\"itemct\" size=\"5\"" +
" value=\"" + ci.getNumberOrdered() + "\" > ");
out.print("<input type=\"SUBMIT\" value=\"");
out.print("Change\" >");
}
out.print("</form></td></tr>\r\n");
}