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>