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

JSP-страница ShowOrder


Эта страница отображает данные о заказе, который был выбран пользователем для просмотра. Для создания объектной модели документа задействуются выбранные с помощью описанной выше страницы файл и папка. Используя скрипт- леты (код внутри тегов <%..%>), мы производим анализ файла с помощью стандартных методов DOM. Результат этого разбора записывается в JSP-выражения (код внутри тегов <*=!...*>). Страница ShowOrder представлена в листинге 5.30. Хотя ее код довольно длинный, многие кодовые фрагменты повторяются.

Листинг 5.30. JSP-страница ShowOrder (ShowOrder.jsp)

<%@ page

import="javax.xml.parsers.*,java.util.*,java.io.*,org.w3c.dom.*, org.xml.sax.*"

%>

<html>

<head><title>Order</title></head>

<body>

<%

double price = 0.0;;

String dir = request.getParameter( "dir" );

String file = request.getParameter( "file" );



Document document = null;

DocumentBuilderFactory factory

= DocumentBuilderFactory.newInstance();

try {

DocumentBuilder builder = factory.newDocumentBuilder();

document = builder.parse( new File( dir, file ) );

}

catch( ParserConfigurationException pce ) {

throw new IOException( "Parser Configuration Error" );

}

catch( SAXException se ) {

throw new IOException( "Parsing Excpetion" );

}

Element order = document.getDocumentElement();

String id = order.getAttribute( "id" );

%>

<h1>Order #<%=id%></h1>

<h2>Items</h2>

<table border="1">

<tr><th>Item</th><th>Description</th><th>Quantity</th> <th>Price</th></tr>

<% NodeList items = order.getElementsByTagName( "item" );

int numItems = items.getLength();

for( int i = 0;i < numItems; i++ ) {

Element item = (Element)items.item( i );

%>

<tr><td><%=item.getAttribute( "id" )%></td>

<td><%=item.getFirstChild().getNodeValue()%></td>


<td><%=item.getAttribute( "quantity" )%></td>

<td><%=item.getAttribute( "price" )%></td>

<% String priceString = item.getAttribute( "price" );

priceString = priceString.replace( '$', ' ' );

price += Double.parseDouble( priceString ); %>

</tr>

<% }%>

</table>

<% NodeList n1 = order.getElementsByTagName ( "customer_info" );

Element cust = (Element)n1.item( 0 );

Node firstName = cust.getElementsByTagName ( "first_name").item(0);

Node lastName = cust.getElementsByTagName ( "last_name" ).item(0);

Node address1 = cust.getElementsByTagName ( "address1" ).item(0);

Node address2 = cust.getElementsByTagName ( "address2" ).item(0);

Node city = cust.getElementsByTagName( "city" ).item(0);

Node state = cust.getElementsByTagName( "state" ).item(0);

Node zip = cust.getElementsByTagName( "zip" ).item(0);

Node email = cust.getElementsByTagName( "email" ).item(0);

Node phone = cust.getElementsByTagName( "phone" ).item(0);

%>

<h2>Customer Information</h2>

Name:

<%=firstName.getFirstChild().getNodeValue()%>

<%=lastName.getFirstChild().getNodeValue()%><br /><br />

Address:<br />

<%=address1.getFirstChild().getNodeValue()%><br/ >

<%=address2.getFirstChild().getNodeValue()%><br />

<%=city.getFirstChild().getNodeValue()%>

<%=state.getFirstChild().getNodeValue()%>

<%=zip.getFirstChild().getNodeValue()%><br /><br />

Email:<%=email.getFirstChild().getNodeValue()%><br />

Phone:<%=phone.getFirstChild().getNodeValue()%><br />

<% NodeList n2 = order.getElementsByTagName( "credit_info" );

Element credit = (Element)n2.item( 0 );

Node number = credit.getElementsByTagName ( "card_number").item(0);

Node type = credit.getElementsByTagName ( "card_type").item(0);



Node exp = credit.getElementsByTagName ( "expiration_date").item(0);

%>

<h2>Credit Card Information</h2>

Type:<%=type.getFirstChild().getNodeValue()%><br />

Number:<%=number.getFirstChild().getNodeValue()%><br />

Expiration Date:<%=exp.getFirstChild().getNodeValue()%><br />

<% NodeList n3 = order.getElementsByTagName ( "authorization" );

Element auth = (Element)n3.item( 0 );

String approved = auth.getAttribute( "approved");

Node reason = auth.getElementsByTagName ( "reason").item(0);

Node auth_code = auth.getElementsByTagName ( "authorization_code").item(0);

%>

<h2>Authorization Information</h2>

Auth Code:<%=auth_code.getFirstChild().getNodeValue()%>

<br />

Approved:<%=approved%><br />

Reason:<%=reason.getFirstChild().getNodeValue()%><br />

<% NodeList n4 = order.getElementsByTagName( "fulfillment" );

Element fulfillment = (Element)n4.item(0);

Node shipper = fulfillment.getElementsByTagName ( "shipper" ).item(0);

Node clas = fulfillment.getElementsByTagName( "class" ).item(0);

Node cost = fulfillment.getElementsByTagName( "cost" ).item(0);

Node tracking = fulfillment.getElementsByTagName ( "tracking_number" ).item(0);

Node dateSent = fulfillment.getElementsByTagName ( "date_sent" ).item(0);

String trackingString = tracking.getFirstChild().getNodeValue();

String dateSentString = dateSent.getFirstChild().getNodeValue();

%>

В нижней части этой JSP- страницы располагается форма, предназначенная для ввода номера отслеживания заказа и даты его отправки. Эти значения можно вводить в том случае, если в поле для номера указано значение NO_TRA- CKING_NUMBER (номер отсутствует). Эта строка используется для указания, что данное поле еще не инициализировано, так что пользователь может ввести новое значение. Если же значения уже заданы, они просто отобразятся и пользователь уже не сможет их редактировать. В этой форме (листинг 5.31) также имеется некоторое количество скрытых полей, которые содержат информацию, необходимую для JSP-страницы, обновляющей файл XML.





Листинг 5.31. Форма для ввода данных о доставке (ShowOrder.jsp)

<form action="UpdateFulfillment.jsp">

<input type="hidden" name="dir" value="<%=dir%>" />

<input type="hidden" name="file" value="<%=file%>" />

<input type="hidden" name="email"

value="<%=email.getFirstChild().getNodeValue()%>" />

<input type="hidden" name="id" value="<%=id%>" />

<input type="hidden" name="auth_code"

value="<%=auth_code.getFirstChild().getNodeValue()%>" />

<input type="hidden" name="price" value="<%=price%>" />

<h2>Fulfillment Info</h2>

Shipper:<%=shipper.getFirstChild().getNodeValue()%><br />

Class:<%=clas.getFirstChild().getNodeValue()%><br />

Cost:$<%=cost.getFirstChild().getNodeValue()%><br />

Tracking #:

<%if( trackingString.equals( "NO_TRACKING_NUMBER" ) ) { %>

<input name="tracking" value="<%=trackingString%>" />

Date Sent:<input name="date_sent" value="<%=dateSentString%>" />

<input type="submit" value="Submit New Fulfillment Data" />

<%} else {%>

<%=trackingString%><br />

Date Sent:<%=dateSentString%>

<%}%>

</form>

<br /><a href="OrderDateSelector.jsp"> Back to date selection</a>

</body>

</html>

 




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