質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

2971閲覧

検索フォーム 該当値が存在しないOR空白の時エラーページを表示させたい

kitten

総合スコア25

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/02/28 02:59

編集2022/01/12 10:55

前提・実現したいこと

タイトル通りデータベースに存在しない値が入力された時(1)と
何も入力されずに検索ボタンが押された時(2)に
エラーページが表示されるようにしたい。

発生している問題・エラーメッセージ

現状としまして、結果は
(1)項目名の1行だけが表示される
(2)データベース内全てのデータが表示される
です。

該当のソースコード

HTML

1<html> 2 <head> 3 <title>型棚検索</title> 4 <link rel="stylesheet" type="text/css" href="/Katadana/css/DBTest-all.css" /> 5 </head> 6 <body> 7 <h1 id="heading">型棚検索システム</h1> 8 <div id="center-block"> 9 <form id="form" action="/Katadana/jsp/DBTest.jsp" method="post"> 10 <input id="sbox" type="text" name="key" placeholder="部品コードを入力して下さい" onblur="toHalfWidth(this)"/><input id="sbtn" type="submit" value="検索"> 11 </form> 12 </div> 13 <script> 14 function toHalfWidth(elm) { 15 elm.value = elm.value.replace(/[A-Za-z0-9!-~]/g, function(s){ 16       return String.fromCharCode(s.charCodeAt(0)-0xFEE0); 17   }); 18 } 19 </script> 20 </body> 21</html> 22

JSP

1<%@page import="java.util.*"%> 2<%@page import="java.sql.*"%> 3 4<%@ page language="java" contentType="text/html; charset=UTF-8" 5 pageEncoding="UTF-8"%> 6<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 7<html> 8<head> 9<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 10<link rel="stylesheet" type="text/css" href="/Katadana/css/DBTest-jsp.css" /> 11<title>PostgreSQL server connection test</title> 12</head> 13<body> 14 15 16<% 17 //変数定義 18 Connection conn = null; 19 PreparedStatement ps = null; 20 ResultSet rs = null; 21 22 try { 23 24 String dbURL = "jdbc:postgresql://localhost:5432/katadanadb"; 25 String user = "postgres"; 26 String pass = "takahashi"; 27 String key = "%"; 28 29 if(request.getParameter("key") != null) { 30 if(request.getParameter("key") != "") { 31 key = request.getParameter("key") + "%"; 32 } 33 } 34 35 System.out.println("*** key = " + key); 36 37 conn = DriverManager.getConnection(dbURL, user, pass); 38 39 40 String sql = "SELECT * from katadana WHERE pcode LIKE ?"; 41 42 ps = conn.prepareStatement(sql); 43 key = key.replace("*", "%"); 44 ps.setString(1, key); 45 46 47 48 //SELECTを実行する 49 rs = ps.executeQuery(); 50 51 //取得した結果を全件出力する 52 //out.println("<div class="table-scroll">"); 53 out.println("<table>"); 54 out.println("<tr><th>型棚番号</th><th>部品コード</th><th>部品名</th><th>工程</th></tr>"); 55 while(rs.next()){ 56 out.println("<tr>"); 57 out.print("<td>" + rs.getString("snum") + "</td>"); 58 out.print("<td>" + rs.getString("pcode") + "</td>"); 59 out.print("<td>" + rs.getString("pname") + "</td>"); 60 out.print("<td>" + rs.getString("process") + "</td>"); 61 out.println("</tr>"); 62 } 63 out.println("</table>"); 64 //out.println("</div>"); 65 66 } catch (SQLException ex) { 67 ex.printStackTrace(); 68 } finally { 69 try { 70 if (conn != null && !conn.isClosed()) { 71 conn.close(); 72 } 73 } catch (SQLException ex) { 74 ex.printStackTrace(); 75 } 76 } 77%> 78</body> 79</html> 80

試したこと

上記JSPの//SELECTを実行する
rs = ps.executeQuery();

のあとに
<c:if pcode="">
error message
</c:if>

のようにしてpcodeの値によって条件分岐させればよいのかと最初は
考えたのですが実行したところ何も表示されませんでした。

また調べたところ<% %>で囲むやり方があったので
そちらも試してみましたが同様の結果でした。

行き詰ってしまったのでどなたかご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/02/28 04:08

というかまさかjspの全部書くとは思いませんでした。 画面表示部分とロジック部分はわけるべきですし、そのためのサーブレットなんですが・・。
kitten

2019/02/28 05:24

すみません...。インデント修正しておきました。 画面表示部分というのは out.println("<table>");以下のことでしょうか? 私もこの部分はhtmlの方に書いた方がいいと思いましたが 書き換え方がいまいち分かりません...。
m.ts10806

2019/02/28 05:28

サーブレット側で検索条件をうけとって検索結果のデータを返すだけにしたほうがスッキリしますよね。 jspに全部書くのは大昔のPHPとやってること変わらないです。 そのあたり、前の質問に参考記事のリンクを置いたはずなんですが。 https://teratail.com/questions/175011
guest

回答1

0

サーブレットやJSPから別のリソースを表示するには、RequestDispatcherを使います。
なお、JSPではもっと簡易に使えるよう、<jsp:forward> アクションタグがあります。

html

1<jsp:forward page="error.jsp" />

JSP標準のスクリプトレットと組み合わせると、

html

1<% 2 if ("".equals(key)) { 3%> 4 <jsp:forward page="error.jsp" /> 5<% 6 } 7%>

のように、少々読みにくい状態にはなりますが、JSPだけで完結させる場合にはこれで可能です。

投稿2019/03/19 14:59

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問