JSP + JAVABEAN + XMLを利用した開発例
著者:Eve Cole
更新時間:2009-07-02 17:12:18
この例では、いくつかの Web サイト上の XML での JSP 操作に関する関連ドキュメントを参照し、いくつかの個人的な経験を組み合わせています。この例には、企業の内部注文システムのバックエンド管理のためのコードの一部の開発が含まれており、この機能は主にレストランに関する基本情報の管理に焦点を当てています。
この例自体は、私が以前の会社で同僚と交わした冗談の一部として開発されました。また、一緒に仕事をしてきた友人たちに憧れの気持ちを表したいと思います。
この例自体は、TOMCAT4.01 プラットフォームで実行される B/S 構造化プログラムです。 TOMCAT の構成についてはここでは説明しません。関連するファイルとフォルダーのディレクトリ構造を説明するだけです。
ディレクトリ構造の説明:
/tomcat/webapps/canyin/ -----ホームディレクトリ
/tomcat/webapps/canyin/jsp/ -----JSP ファイルディレクトリ
/tomcat/webapps/canyin/jsp/admin/ -----バックグラウンド管理を実装する JSP ファイルの保存ディレクトリ
/tomcat/webapps/canyin/WEB-INF/classes/canyin/ ------Javabean ファイルの格納ディレクトリ
/tomcat/webapps/canyin/data/ -----xml ファイル格納ディレクトリ
/tomcat/webapps/ROOT/ -----Tomcat 起動ファイル格納フォルダー。index.html ファイルのみが格納されます。
ファイルの簡単な説明:
/tomcat/webapps/canyin/data/users.xml -----ユーザー情報を記録します
/tomcat/webapps/canyin/data/restaurants.xml -----レストランの基本情報を記録します。
/tomcat/webapps/ROOT/index.html -----ホーム ページでは、ページ上に入力ボックスが表示され、ユーザーはユーザー名とパスワードを入力する必要があります。
/tomcat/webapps/canyin/jsp/loginjudge.jsp -----ユーザー本人性判定ページは、ユーザー名とパスワードに基づいて、バックグラウンド管理端末に転送するかフロントエンドクライアントに転送するかを決定します。 。この例では、ユーザー本人が管理権限を持っていることが確認されると、バックエンド管理端末に入り、レストランの基本情報管理ページに直接ジャンプできるため、説明プロセスが簡素化されます。
/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp -----レストラン基本情報管理ページ、レストランの名前、電話番号、住所などを管理します。
/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class ----- バックグラウンド管理端末は、ユーザーの ID を示すセッション値を検出し、管理者でない場合は、元の状態に戻ります。ログインページ。
/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class -----xml ファイルの接続
/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class -----xml ファイルの書き込み
ファイルとそれに伴うコードの詳細な説明。
/tomcat/webapps/canyin/data/users.xml
コード:
<?xml バージョン="1.0" エンコーディング="UTF-8" ?>
- <ユーザー>
<ユーザー名="joard" パスワード="joard" 役割="管理者" />
<ユーザー名="joard01" パスワード="joard01" 役割="ユーザー" />
<ユーザー名=”joard02” パスワード=”joard02” 役割=”ユーザー” />
</ユーザー>
説明: フィールドの意味は、ユーザー名、パスワード、ユーザーの ID です。
/tomcat/webapps/canyin/data/restaurants.xml
コード:
<?xml バージョン="1.0" エンコーディング="UTF-8" ?>
- <レストラン num="10">
- <レストランID="1">
<name>上海ティン ファストフード レストラン</name>
<電話>021-76546726</電話>
<アドレス>ブロードウェイ プラザ タワー B</アドレス>
</レストラン>
- <レストランid="8">
<name>シャングリラ ホテル</name>
<電話>021-2312134</電話>
<住所>南京路1023号</住所>
</レストラン>
</レストラン>
注: <num> 属性は、restaurants.xml ファイル内のレコードの合計数を記録します。新しいレコードが追加されるたびに、後で削除されるかどうかに関係なく、値は 1 ずつ増加します。データベース内の項目が自動的に 1 ずつ増加します。新しく追加された <restaurant> の属性 <id> に一意の値を割り当てるために使用されます。他のフィールドの意味はより明白です。
/tomcat/webapps/ROOT/index.html (純粋な HTML コード)
コード:
<html>
<頭>
<title>oddWorld ケータリング システム</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body onload="javascript:dataform.username.focus()">
<div align="center">
<table width="100%" border="0" cellpacing="0" cellpadding="0" height="22">
<tr>
<td width="1"><img src="images/top_r1.GIF" width="62" height="22"></td>
<td width=150 align="center"> ケータリング システムへのログイン </td>
<td><img src="images/top_r2.GIF" width="294" height="22"></td>
</tr>
</テーブル>
<br>
<br>
<table width="300" border="0" cellpacing="1" cellpadding="0" >
<tr>
<td height="200" valign="top" align="center">
<p align="center">
<table width="100%" border="0" cellpacing="1" cellpadding="5" bgcolor=#999999 class=a9px>
<tr>
<td bgcolor="#efefef">ケータリング システムへのログイン</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" valign="top" align="center">
<table width="100%" border="0" cellpacing="0" cellpadding="0">
<form name=dataform method=post action=''canyin/jsp/loginjudge.jsp''>
<tr>
<td width="100"><b>ログイン名:</b></td>
<td>
<入力最大長=16
name="ユーザー名" class=stedit value="joard">
</td>
</tr>
<tr>
<td width="100"><b>パスワード:</b></td>
<td>
<入力クラス=stedit maxlength=16
name="userpass" type=password value="oddworld">
</td>
</tr>
</form>
</テーブル>
<br>
<table border=0 cellpadding=0 cellpacing=0>
<本体>
<tr>
<td>
<input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="ログイン">
</td>
<td> </td>
<td>
<input class=stbtm name=Submit onClick="javascript:window.location.href=''index.asp?myjoke=1'';" type=button value="パスワードの変更">
</td>
<td> </td>
</tr>
</tbody>
</テーブル>
<br>
</td>
</tr>
</テーブル>
</td>
</tr>
</テーブル>
</div>
</body>
</html>
<SCRIPT言語=javascript>
<!--
関数チェックフォーム()
{
var Checkblank = /^(s*|( )|(.))*$/;
if (Checkblank.test(dataform.username.value))
{
alert("ログイン名を空にすることはできません!");
false を返します。
}
if (Checkblank.test(dataform.userpass.value))
{
alert("パスワードを空にすることはできません!");
false を返します。
}
window.dataform.submit();
}
-->
</スクリプト>
手順: ユーザー名とユーザー パスワードを /tomcat/webapps/canyin/jsp/loginjudge.jsp に送信します。
/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class (コードは対応する Java ファイルです)
パッケージcanyin;
インポート javax.servlet.http.HttpSession;
インポート javax.servlet.http.HttpServletRequest;
パブリック クラス checkSessionBean {
プライベートブール値 bolCheckPass=false;
プライベート HttpServletRequest リクエスト = null;
public boolean checkSessionBean(HttpServletRequest request,String strSessionName,String strCheckValue){
public boolean checkSessionBean(HttpServletRequest request){
HttpSession セッション = request.getSession(false);
return(bolCheckPass);
if (strSessionName==null || strCheckValue==null){
return(bolCheckPass);
}それ以外{
if (session!=null && session.getValue(strSessionName)!=null){
bolCheckPass=session.getValue(strSessionName).equals(strCheckValue);
}
return(bolCheckPass);
}
}
}
説明: パラメータとして渡されたセッション名の値と、パラメータとして渡されたフィールドの値が等しいかどうかを確認します。
/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class
コード:
パッケージcanyin;
インポート javax.xml.parsers.*;
インポート javax.xml.transform.*;
インポート javax.xml.transform.dom.DOMSource;
インポートjavax.xml.transform.stream.StreamResult;
org.w3c.dom.* をインポートします。
パブリック クラス connXmlBean {
プライベートDocumentBuilderFactoryファクトリー=null;
プライベート DocumentBuilder builder=null;
プライベートドキュメント doc=null;
public connXmlBean(){}
public String connXml(String xmlFileName){
文字列 strExc="";
試す{
ファクトリー = DocumentBuilderFactory.newInstance();
builder=factory.newDocumentBuilder();
doc=builder.parse(xmlファイル名);
doc.normalize();
}catch(例外 e){
strExc=e.toString();
}
戻り値(strExc);
}
パブリックドキュメント getXmlDoc(){
リターン(ドキュメント);
}
}
説明: 指定された XML ファイルを開きます
/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class
コード:
パッケージcanyin;
インポート javax.xml.parsers.*;
インポート javax.xml.transform.*;
インポート javax.xml.transform.dom.DOMSource;
インポートjavax.xml.transform.stream.StreamResult;
java.io.ファイルをインポートします。
org.w3c.dom.* をインポートします。
パブリック クラス writeXmlBean {
パブリック writeXmlBean(){}
public String writeXml(Document doc,String xmlFileName){
文字列 strExc="";
試す{
TransformerFactory tfactory = TransformerFactory.newInstance();
トランスフォーマー トランスフォーマー = tfactory.newTransformer();
DOMSource ソース = 新しい DOMSource(doc);
StreamResult 結果 = new StreamResult(new File(xmlFileName));
トランスフォーマー.transform(ソース,結果);
}catch(例外 e){
strExc=e.toString();
}
戻り値(strExc);
}
}
説明: dom の内容を指定された XML ファイルに書き込みます。
/tomcat/webapps/canyin/jsp/loginjudge.jsp
コード:
<%-- oddWorld ケータリング管理システム (簡体字中国語版) 2002 年 12 月 1 日
joard ast によって権利をコピーします
loginjudge.jsp 関数: /data/user.xml ファイルでマークされたユーザーのさまざまな ID に基づくユーザー ID 検証
バックエンド管理ページまたは顧客注文ページに移動することを決定します。
--%>
<%@ ページ contentType="text/html;charset=gb2312" %>
<%@ ページ言語="java" import="javax.xml.parsers.*" %>
<%@ page import="org.w3c.dom.*" %>
<%@ ページ import="canyin.*" %>
<jsp:useBean id="xmlBean" class="canyin.connXmlBean"scope="page" />
<%
session.setMaxInactiveInterval(1800);
文書ドキュメント。
NodeList ユーザー。
文字列 strExc="";
文字列 strUsername,strPassword;
strUsername=(String)request.getParameter("ユーザー名");
strPassword=(String)request.getParameter("ユーザーパス");
//データが空かどうかを確認する
if (strUsername=="" || strPassword=="" ){
out.println("<script language=''javascript''>");
out.println("alert(''ユーザー名またはパスワードが null 値です!'');");
out.println("window.location.href=''/index.html'';");
out.println("</script>");
戻る;
}
xmlBean.connXml("webapps/canyin/data/users.xml");
doc=xmlBean.getXmlDoc();
試す{
ユーザー =doc.getElementsByTagName("ユーザー");
for (int i=0;i<users.getLength();i++){
要素 user=(要素) users.item(i);
String strAtrNameValue=user.getAttributeNode("name").getNodeValue();
String strAtrPassWordValue=user.getAttributeNode("パスワード").getNodeValue();
String strAtrRoleValue=user.getAttributeNode("ロール").getNodeValue();
if (strAtrNameValue.equals(strUsername) && strAtrPassWordValue.equals(strPassword)){
if (strAtrRoleValue.equals("admin")){
out.println("<script language=''javascript''>");
out.println("alert(''管理者へシステムへのログインへようこそ!'');");
out.println("</script>");
//ユーザー ID を示すセッション (sesUserRole) を設定します。管理者 ID は admin です
session.setAttribute("sesUserRole","admin");
//管理ページへジャンプ
response.sendRedirect("admin/admin_rest.jsp");
戻る;
}それ以外{
// ユーザーの ID を示すセッション (sesUserRole) を設定します。管理者の ID は user です
session.setAttribute("sesUserRole","user");
//通常のユーザーページにジャンプします
response.sendRedirect("index.jsp");
戻る;
}
}それ以外{
out.println("<script language=''javascript''>");
out.println("alert(''ユーザー名またはパスワードが間違っています!'');");
out.println("history.go(-1);");
out.println("</script>");
戻る;
}
}
}catch(例外 e){
strExc=e.toString();
}
%>
例証します:....
/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp
コード:
<%-- oddWorld ケータリング管理システム (簡体字中国語版) 2002 年 12 月 1 日
joard ast によって権利をコピーします
admin_rest.jsp 関数: バックエンド管理ページ、レストラン管理ページ。
--%>
<%@ ページ contentType="text/html;charset=gb2312" %>
<%@ ページ言語="java" import="javax.xml.parsers.*" %>
<%@ page import="javax.xml.transform.*" %>
<%@ page import="org.w3c.dom.*" %>
<%@ ページ import="canyin.*" %>
<%@ include file="../../include/sys_dialog.jsp" %>
<jsp:useBean id="checkSessionBean" class="canyin.checkSessionBean"scope="page" />
<jsp:useBean id="xmlBean" class="canyin.connXmlBean"scope="page" />
<jsp:useBean id="writeXmlBean" class="canyin.writeXmlBean"scope="page" />
<%//ユーザーの身元を確認して、そのユーザーが管理者であるかどうかを判断します
if(!checkSessionBean.checkSessionBean(request,"sesUserRole","admin")){
out.print(showDialog("管理者権限がありません!","/index.html"));
戻る;
}
//レストラン情報ファイルrest.xmlから関連データを取得
文書ドキュメント。
ノードリストのレストラン。
文字列 strAct;
int intId=0;
文字列 strOperation = "表示";
//渡された外部パラメータを受け入れます
strAct=(String)request.getParameter("act");
xmlBean.connXml("webapps/canyin/data/restaurants.xml");
doc=xmlBean.getXmlDoc();
レストラン =doc.getElementsByTagName("レストラン");
//渡された外部パラメータに基づいて、restaurant.xml ファイルの操作を決定します。
if (strAct!=null){
if(strAct.equals("addnewDo")){
文字列 strName;
文字列 strPhone;
文字列 strAddress;
テキストテキストセグメント;
strName=(String)request.getParameter("name").trim();
strPhone=(String)request.getParameter("電話").trim();
strAddress=(String)request.getParameter("アドレス").trim();
//データ検証
if(strName==null){
out.print(showDialog("レストラン名を空にすることはできません!"));
戻る;
}
if(strPhone==null){
out.print(showDialog("レストランの電話番号を空白にすることはできません!"));
戻る;
}
/*if(strAddress==null){
out.print(showDialog("レストランの住所を空にすることはできません!"));
戻る;
}*/
// データの一意性を検証する
for(int i=0;i<restaurants.getLength();i++){
要素レストラン=(要素)レストラン.アイテム(i);
if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName)){
out.print(showDialog("レストラン名が重複しています!"));
戻る;
}それ以外{
if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone)){
out.print(showDialog("レストランの電話番号を繰り返してください!"));
戻る;
}
}
}
//既存のレコードの数を取得し、新しいレストラン レコードの一意の増分 ID 属性を設定します
int intNum=0;
要素restNum=(Element)doc.getElementsByTagName("レストラン").item(0);
intNum=Integer.parseInt(restNum.getAttributeNode("num").getNodeValue());
intNum+=1;
//レストラン属性 num の値に 1 を加算します
restNum.getAttributeNode("num").setNodeValue(String.valueOf(intNum));
//ノードを追加
要素 newRestaurant=doc.createElement("レストラン");
Attr newArrId=doc.createAttribute("id");
//属性 newArrId = 新しい属性("id",String.valueOf(intNum));
textseg=doc.createTextNode(String.valueOf(intNum));
newArrId.setValue(String.valueOf(intNum));
newRestaurant.setAttributeNode(newArrId);
要素 newName=doc.createElement("name");
textseg=doc.createTextNode(strName);
newName.appendChild(textseg);
newRestaurant.appendChild(newName);
要素 newPhone=doc.createElement("電話");
textseg=doc.createTextNode(strPhone);
newPhone.appendChild(textseg);
newRestaurant.appendChild(newPhone);
要素 newAddress=doc.createElement("アドレス");
textseg=doc.createTextNode(strAddress);
newAddress.appendChild(textseg);
newRestaurant.appendChild(newAddress);
doc.getDocumentElement().appendChild(newRestaurant);
//Bean を呼び出して、対応する XML ファイルを書き込みます
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
応答.sendRedirect(request.getRequestURI());
戻る;
}
if(strAct.equals("modiDo")){
文字列 strName;
文字列 strPhone;
文字列 strAddress;
テキストテキストセグメント;
int modId;
// 変更されるレコードがどの項目 (i) であるかを記録します
int intI=0;
strName=(String)request.getParameter("name").trim();
strPhone=(String)request.getParameter("電話").trim();
strAddress=(String)request.getParameter("アドレス").trim();
modiId=Integer.parseInt(request.getParameter("recordId").trim());
//データ検証
if(strName==null){
out.print(showDialog("レストラン名を空にすることはできません!"));
戻る;
}
if(strPhone==null){
out.print(showDialog("レストランの電話番号を空白にすることはできません!"));
戻る;
}
if(modiId==0){
out.print(showDialog("変更したいレストランのレコードは存在しません!"));
戻る;
}
/*if(strAddress==null){
out.print(showDialog("レストランの住所を空にすることはできません!"));
戻る;
}*/
// フラグはレコードが存在することを示します
ブール値のレコード存在=false;
// データの一意性を検証する
for(int i=0;i<restaurants.getLength();i++){
要素レストラン=(要素)レストラン.アイテム(i);
if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==modiId){
レコード存在 = true;
intI=i;
}
if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName) && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue() )!=modiId ){
out.print(showDialog("レストラン名が重複しています!"));
戻る;
}それ以外{
if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone) && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue() )!=modiId ){
out.print(showDialog("レストランの電話番号を繰り返してください!"));
戻る;
}
}
}
if(!recordExist){
out.print(showDialog("変更したいレストランのレコードは存在しません!"));
戻る;
}それ以外{
//レコードの変更を実行します
試す{
要素 modiRestaurant=(要素) restaurant.item(intI);
modiRestaurant.getElementsByTagName("name").item(0).getFirstChild().setNodeValue(strName);
modiRestaurant.getElementsByTagName("phone").item(0).getFirstChild().setNodeValue(strPhone);
modiRestaurant.getElementsByTagName("アドレス").item(0).getFirstChild().setNodeValue(strAddress);
//Bean を呼び出して、対応する XML ファイルを書き込みます
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
応答.sendRedirect(request.getRequestURI());
戻る;
}catch(例外 e){}
}
}
//削除操作を実行します
if(strAct.equals("del")){
int delId;
// 変更されるレコードがどの項目 (i) であるかを記録します
int intI=0;
delId=Integer.parseInt(request.getParameter("recordId").trim());
if(delId==0){
out.print(showDialog("変更したいレストランのレコードは存在しません!"));
戻る;
}
file:// フラグはレコードが存在することを示します
ブール値のレコード存在=false;
// データの一意性を検証する
for(int i=0;i<restaurants.getLength();i++){
要素レストラン=(要素)レストラン.アイテム(i);
if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==delId){
レコード存在 = true;
intI=i;
}
}
if(!recordExist){
out.print(showDialog("削除したいレストランのレコードは存在しません!"));
戻る;
}それ以外{
//レコードの削除操作を実行します
試す{
ノード delNode=(Node)restaurants.item(intI);
doc.getElementsByTagName("レストラン").item(0).removeChild(delNode);
//Bean を呼び出して、対応する XML ファイルを書き込みます
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
応答.sendRedirect(request.getRequestURI());
戻る;
}catch(例外 e){}
}
}
}
//ページの対応する処理ステータスは外部パラメータによって決定されます。
if (strAct==null){
strOperation="表示";
}それ以外{
if (strAct.equals("modi")){
strOperation="モディ";
intId=Integer.parseInt(request.getParameter("recordId"));
}それ以外{
if(strAct.equals("addnew")){
strOperation="追加新規";
}それ以外{
strOperation="表示";
}
}
}
//レコードが空の場合は、ページのステータスを「新規」に変更します
if (restaurants.getLength()==0){
strOperation="追加新規";
}
%>
<html>
<頭>
<title>oddWorld ケータリング システム</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="expires" content="0">
<link rel="stylesheet" href="../../include/itsp.css" type="text/css">
</head>
<本文>
<div align="center">
<table width="100%" border="0" cellpacing="0" cellpadding="0" height="22">
<tr>
<td width="1"><img src="../../images/top_r1.GIF" width="62" height="22"></td>
<td width=150 align="center"> ケータリング システム管理 - レストラン管理</td>
<td><img src="../../images/top_r2.GIF" width="294" height="22"></td>
<td width=100 align="center"><a href="/index.html">[システムの終了]</a></td>
</tr>
</テーブル>
<br>
<br>
<table bgcolor="#999999" align=center border=0 cellpadding=1 cellpacing=1
width="90%">
<本体>
<tr bgcolor="#efefef" align="center" valign="middle">
<td class=ttTable height=30 width="20"> </td>
<td class=ttTable height=30 width="0">レストラン名</td>
<td class=ttTable height=30 width="0">レストランの電話番号</td>
<td class=ttTable height=30 width="0">
<div align="center">レストランの住所</div>
</td>
<td class=ttTable height=30 width="30">
<div align="center">変更</div>
</td>
<td class=ttTable height=30 width="30">
<div align="center">削除</div>
</td>
</tr>
<%
for(int i=0;i<restaurants.getLength();i++)
{
要素レストラン=(要素)レストラン.アイテム(i);
if (strOperation=="modi" && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==intId){
%>
<%//変更された形式を表示%>
<tr align="center" bgcolor="#ffffff" valign="middle">
<form name=dataform action="<%=request.getRequestURI()%>?act=modiDo" method="post" onSubmit=''return checkform(this);'' >
<td class=tdsmall height=25 width="20">
<input type="hidden" name="recordId" value="<%=restaurant.getAttributeNode("id").getNodeValue()%>">
<%=(i+1)%></td>
<td class=tdsmall height=25>
<input name="name" class=stedit
style="高さ: 22px; 幅: 150px" value="<%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
}%>
" maxlength="40" >
</td>
<td class=tdsmall height=25>
<input name="電話" class=stedit
style="高さ: 22px; 幅: 100px" value="<%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue());
}%>" maxlength="20" >
</td>
<td class=tdsmall height=25>
<input name="アドレス" class=stedit
style="高さ: 22px; 幅: 200px" value="<%
if(restaurant.getElementsByTagName("住所").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("住所").item(0).getFirstChild().getNodeValue());
}%>" maxlength="100" >
</td>
<td class=tdsmall height=25 width="25"><a href="javascript:if (checkform()==false);"><img border=0
height=15 src="../../images/editok.gif" width=15></a></td>
<td class=tdsmall height=25 width="25"> </td>
</form>
</tr>
<% }その他{
//通常の形式で表示 %>
<tr align="center" bgcolor="#ffffff" valign="middle">
<td class=tdsmall height=25 width="20"><%=(i+1)%></td>
<td class=tdsmall height=25 width="0"><%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
}%>
</td>
<td class=tdsmall height=25 width="0"><%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue());
}%></td>
<td class=tdsmall height=25 width="0">
<%
if(restaurant.getElementsByTagName("住所").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("住所").item(0).getFirstChild().getNodeValue());
}%>
</td>
<td class=tdsmall height=25 width="30"><a href="<%=request.getRequestURI()%>?act=modi&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()% >"><img border=0
height=15 src="../../images/edit.gif" width=15></a></td>
<td class=tdsmall height=25 width="30"><img border=0
高さ=15
onClick="javascript:if(confirm(''このレコードを削除してもよろしいですか?削除するとレコードは使用できなくなりますか?'')){window.location.href=''<%=request.getRequestURI()%> ? act=del&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()%>'';}"
src="../../images/delete.gif" style="カーソル:手" width=15> </td>
</tr>
<%}
}%>
<% if (strOperation=="addnew"){
//新しい形式を表示%>
<tr align="center" bgcolor="#ffffff" valign="middle">
<form name=dataform2 action="<%=request.getRequestURI()%>?act=addnewDo" method="post" onSubmit=''return checkform2(this);'' >
<td class=tdsmall height=25 width="20"></td>
<td class=tdsmall height=25>
<input name="name" class=stedit
style="高さ: 22px; 幅: 150px" value="" maxlength="40" >
</td>
<td class=tdsmall height=25>
<input name="電話" class=stedit
style="高さ: 22px; 幅: 100px" value="" maxlength="20" >
</td>
<td class=tdsmall height=25>
<input name="アドレス" class=stedit
style="高さ: 22px; 幅: 200px" value="" maxlength="100" >
</td>
<td class=tdsmall height=25 width="25"><a href="javascript:if (checkform2()==false);"><img border=0
height=15 src="../../images/editok.gif" width=15></a></td>
<td class=tdsmall height=25 width="25"> </td>
</form>
</tr>
<% } %>
</tbody>
</テーブル>
<br>
<テーブル align=center border=0 cellpadding=0 cellpacing=2 width="95%">
<本体>
<tr valign=center>
<td align=middle> <br>
<table border=0 cellpadding=0 cellpacing=0>
<tr>
<td>
<% if (strOperation=="addnew"){
%>
<input class=stbtm name=update onClick="javascript:if (checkform2()==false);" type=button value="レコードの更新">
<% }その他{
if(strOperation=="モディ"){
%>
<input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="レコードの更新">
<%
}それ以外{
%>
<input class=stbtm type="button" name="Button" value="New" onClick="javascript:window.location.href=''<%=request.getRequestURI()%>?act=addnew'' ; "><%
}
} %>
</td>
<td>
<input class=stbtm type="button" name="Button" value="Return" onClick="javascript:window.location.href=''index.jsp'';">
</td>
</tr>
</テーブル>
</td>
</tr>
</テーブル>
<p> </p>
</div>
</body>
</html>
<スクリプト言語=javascript>
<!--
関数 checkform2()
{
var Checkblank = /^(s*|( )|(.))*$/;
if (Checkblank.test(dataform2.name.value))
{
alert("レストラン名を空にすることはできません!");
dataform2.name.focus();
false を返します。
}
if (Checkblank.test(dataform2.phone.value))
{
alert("レストランの電話番号を空白にすることはできません!");
dataform2.phone.focus();
false を返します。
}
window.dataform2.submit();
}
関数チェックフォーム()
{
var Checkblank = /^(s*|( )|(.))*$/;
if (Checkblank.test(dataform.name.value))
{
alert("レストラン名を空にすることはできません!");
データフォーム.名前.focus();
false を返します。
}
if (Checkblank.test(dataform.phone.value))
{
alert("レストランの電話番号を空白にすることはできません!");
dataform.phone.focus();
false を返します。
}
window.dataform.submit();
}
-->
</スクリプト>
注: このドキュメントの記述は多くの箇所で簡潔ではありません。これは、プログラム開発の過程でプログラムが簡潔すぎると、後のメンテナンスで困難が生じることがよくあるためです。
開発経験:
doc.getElementsByTagName("restaurants").item(int i) の戻り値はノード型です。その属性値を呼び出したくない場合は、要素型にキャストする必要はありません。直接操作可能です。開発参考資料に誤りがあったため、本システムは強制変形を使用しております。将来の開発では、node を使用して直接操作することを検討できます。
trim() 関数も Interger.parseInt() 関数も null 値を受け入れません。
tomcat配下の左右のファイルはTOMCATから始まるディレクトリです。詳しくはwebappscanyinjspuserjudge.jspのxmlパスの記述を参照してください。
オリジナルのコードに興味のある友人は、次の電子メール アドレス [email protected] までご連絡ください。