Электронный магазин на Java и XML

       

Отображение полной информации о товаре


Метод doShowProduct класса Catal ogServ отвечает за отображение полной информации об одном конкретном товаре. Существует несколько вариантов формата этого отображения в зависимости от наличия в X ML-каталoгe ссылки на изображение этого товара и от того, находится ли уже данный товар в корзине покупателя.

На рис. 4.4 приведено типичное представление, сгенерированное для товара, которого еще нет в корзине покупателя и для которого имеется изображение. Кнопка, расположенная в правом нижнем углу, предназначена для добавления в корзину этого товара. При щелчке на этой кнопке генерируется запрос к сервле- ту, параметр action принимает значение setcart, а параметр itemct — значение 1, в результате в корзине оказывается один экземпляр данного товара.

Рис. 4.4. Отображение полной информации о товаре вместе с его изображением

Рис. 4.5. Информация о товаре без его изображения

Если товар уже был заказан покупателем и находится в корзине, то страница с информацией о нем включает поле текущего количества заказанных экземпляров товара и позволяет его изменять. Пример такой страницы показан на рис. 4.5, причем для данного товара не предусмотрено изображения. Если пользователь щеллкает на кнопке Change (Изменить), в запросе к сервлету значение параметра action будет равно setcart, а значение itemct — введенному числу.

Теперь рассмотрим подробно, как устроен метод doShowProduct, код которого приведен в листинге 4.11. Этот метод отображает подробную информацию о данном товаре и позволяет добавлять товар в корзину. В первую очередь этот метод должен получить экземпляр класса Choppi ngCart. В приведенном коде используется метод getAttribute класса HttpSession, который является предпочтительным по отношению в устаревшему методу getValue. Закомментированная строка показывает, как использовать метод getValue, если в вашем случае процессор сервлетов ориентирован на версию 2.1 API.

Когда вызывается метод doShowProduct, в объекте HttpServletRequest всегда будет содержаться параметр id, который однозначно идентифицирует отображаемый товар.


Когда пользователь щелкает на кнопке (такой, как на рис. 4.4 или 4.5), вызывается метод doShowProduct со значением параметра action, равным setcart. В этом случае значение параметра itemct интерпретируется как новое количество заказанных экземпляров данного товара.



Когда вызывается метод doShowProduct с параметром action, равным showproduct, количество заказанных товаров (numberOrdered) не изменяется.



Листинг 4.11. Метод doShowProduct, который отображает информацию о товаре и позволяет заказывать товар (CatalogServ.java)

public void doShowProduct( HttpServletRequest req, HttpServletResponse resp,

PrintWriter out, HttpSession session, String action ){

ShoppingCart cart = (ShoppingCart)session.getValue("cart");

// older servlet engines use getValue

// ShoppingCart cart = session.getAttribute("cart"); // API 2.2

if( cart == null ){ // presumably the first pass

cart = new ShoppingCart();

session.putValue("cart", cart ); // older

//session.setAttribute( "cart",cart ); // API 2.2

}

out.print( brcrlf );

CatalogBean cb = new CatalogBean();

String id = req.getParameter( "id" );

if( "setcart".equals( action ) ){

String tmp = req.getParameter("itemct");

int itemct = 0;

try {

itemct = Integer.parseInt( tmp );

}catch(NumberFormatException e){

System.out.println("doShowProduct " + e );

}

CartItem item = cart.getProdById( id );

if( item == null ){

item = cb.createCartItem( id );

cart.addItem( item );

}

item.setNumberOrdered( itemct );

cart.removeEmptyItems();

}

out.print("<table width=\"70%\" border=\"3\" align=\"center\" >\r\n");

cb.doFullItem( id, out, cart, alias );

out.print("</table>\r\n");

}

Если action = showcart, то вызывается метод doShowCart. Как показано в листинге 4.12, этот метод переписывает теги HTML, которые задают начало и конец таблицы. Строки таблицы заполняются с помощью метода doCartList класса CatalogBean.



Листинг 4.12. Метод doShowCart (catalogServ.java)

public void doShowCart( HttpServletRequest req, HttpServletResponse resp,

PrintWriter out, HttpSession session, String action ){

ShoppingCart cart = (ShoppingCart)session.getValue("cart");

// older servlet engines use getValue

// ShoppingCart cart = session.getAttribute("cart"); // API 2.2

if( cart == null ){

out.println("Serious problem with session data" + brcrlf );

return ;

}

CatalogBean cb = new CatalogBean();

String link = alias + "?action=showproduct" ;

cb.setOutput("short", link);

out.print("<table width=\"90%\" border=\"3\" align=\"center\" >");

cb.doCartList( out, cart );

out.print("</table>\r\n");

}

 




Содержание раздела