JSP DB サーブレット 表示
こにちは。最後のfor分の記述でまよっています。
今回JSPで検索 表示 サーブレットでDB取得(二次元配列で返しています)
昇順、降順、指定行だけ表示、前方一致などの条件をつけて表示しようとしています
JSPの最後のFOR文の回数のとこlistサイズなどにしたいのですが
リストがないときどうすればいいのかなと・・・
あとは今はとりあえず10と指定しているので前方一致のときに
件数がへるとインデックスが存在しないというエラーがでます
どういう風に書けばうまくいくのか少しでいいんでアドバイスください
String name=request.getParameter("name");
//NAMEの前方一致条件取得
String narabi=request.getParameter("narabi");
//降順、昇順、の値取得
String menu=request.getParameter("menu");
//昇順、降順するところの列 name取得
db.updateExec("insert into TESTTABLE1(TESTNO,NAME,KANA) values("+1+",'山田', 'ヤマダ')");
db.updateExec("insert into TESTTABLE1(TESTNO,NAME,KANA) values("+2+",'佐藤', 'サトウ')");
・・・・・・・・・ /
/課題のため10行入力
db.commit(); //コミットして 確定
ArrayList list;
ArrayList list1;
ArrayList list2;
//リスト作成
if(narabi!=null){//昇順 降順にチェックがあるか判断
String[][]hai4=db.selectExec("SELECT * FROM TESTTABLE1 WHERE NAME LIKE'"+name+"%' order by "+menu+" "+narabi+" ;");
//nameで前方一致 menuで昇順降順場所 narabiで降順昇順
list = new ArrayList(Arrays.asList(hai4[0]));
list1 = new ArrayList(Arrays.asList(hai4[1]));
list2 = new ArrayList(Arrays.asList(hai4[2]));
}else{//昇順降順なければこっち
String[][]hai3=db.selectExec("SELECT * FROM TESTTABLE1 WHERE NAME LIKE'"+name+"%';");
//nameで前方一致
list = new ArrayList(Arrays.asList(hai3[0]));
list1 = new ArrayList(Arrays.asList(hai3[1]));
list2 = new ArrayList(Arrays.asList(hai3[2]));
}
if (request.getParameter("TESTNO") != null){
request.setAttribute("list", list);
}
if (request.getParameter("NAME") != null){
request.setAttribute("list1", list1);
}
if (request.getParameter("KANA") != null){
request.setAttribute("list2", list2);
}
//列指定されたときだけ setAttribute
db.disconnect();//クローズする
RequestDispatcher dispatcher =request.getRequestDispatcher("/::::.jsp");
//フォワード ページ指定
dispatcher.forward(request, response);
JSP(検索、表示)
<html>
<head>
<H1>検索画面</H1>
</head>
<body>
<from>
<form method="get" action="../Servlet">
検索内容 TESTNO <input type="checkbox" name="TESTNO" value="TESTNO" >
NAME <input type="checkbox" name="NAME" value="NAME" >
KANA <input type="checkbox" name="KANA" value="KANA" > <br>
検索条件 <input type="text" name="name" >(NAME前方一致)<br>
ソート <select name="menu"><br>
<option value=TESTNO>TESTNO</option>
<option value=NAME>NAME</option>
<option value=KANA>KANA</option>
</select>
<input type="radio" name="narabi" value="ASC" /> 昇順
<input type="radio" name="narabi" value="DESC"/> 降順
<br><input type="submit" value="検索">
</from>
</body>
</form>
<Hr>
<%
if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){
for(int i=0; i<10; i++){
if(request.getAttribute("list")!=null){
List list=(List)request.getAttribute("list");
out.print(list.get(i)+" ");
}
if(request.getAttribute("list1")!=null){
List list1=(List)request.getAttribute("list1");
out.print(list1.get(i)+" ");
}
if(request.getAttribute("list2")!=null){
List list2=(List)request.getAttribute("list2");
out.println(list2.get(i));
}
文字数の関係ですこし削っているところもありますが
アドバイスよろしくおねがいします
補足
すいません。字数制限で省いていって質問を消してしまいました。 テーブルにレコードを追加して前出のservlet(ext_db5_2_1.java)を呼び出しテーブル表示をさせるservlet(ext_db5_2_2.java)がうまくいかなくてその問題箇所のソースを表示しています。途中までうまくいっているのか、数字などは追加されるんですが、日本語はアルファベットがでてきます。(文字バケはしてないです) 後、『servlet(ext_db5_2_1.java)を呼び出しテーブル表示をさせる』部分がうまくいってないようです。HTML画面から送信ボタンを押すと何も表示されず、URLを ext_db5_2_1の方へ書き換えると申し上げた日本語表示されてない画面がでてきます。