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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

JSP

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Q&A

解決済

3回答

1179閲覧

JSPでURLの後ろの?hoge=fooが在るか無いか判断したい

moyashikun

総合スコア11

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

JSP

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

0グッド

0クリップ

投稿2020/01/28 03:59

編集2020/01/28 04:14

前提・実現したいこと

test01.jspから<a href="./Test02">とリンクする場合と<a href="./Test02?id=foo">でリンクする場合
test02.jsp側でidがあるか無いか判断して、その分岐で表示内容を変えたい
test02.jspでどのようにURLを判断すればよろしいですか
また"?id=foo"この部分の名称がわからないので教えてください
Test02.javaではidの有無により処理を分岐しています
idがある場合はtest02.jspでそのIDに対する中身を表示できているのですがIDがない場合は何も表示されなくて困ってます

該当のソースコード

test01jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3<!DOCTYPE html> 4<html> 5<head> 6<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7<script type="text/javascript" src="../js/dialog.js" charset="UTF-8"> 8</script> 9<title>test</title> 10<script type="text/javascript"> 11<!-- 12 13function deleteEmp(info.id) { 14 if(window.confirm('OK')){ 15 location.href = "./Delete?id=" + id; 16 } 17} 18 19// --> 20</script> 21 22</head> 23<body> 24<a href="./Register">登録</a><br> 25<h1>一覧</h1> 26<table border="1"> 27<tr><th>No</th><th>会社名</th><th>社員名</th><th>社員ID</th><th>性別</th><th>勤務形態</th><th>詳細</th><th>削除</th></tr> 28<c:forEach var="info" items="${en}" > 29 <tr> 30 <td><c:out value="${info.id}" /></td> 31 <td><a href="./Test02?ed=${info.id}">中身</a></td> 32 <td><p><a onClick="deleteEmp('${info.id}')">削除</a></p></td> 33 </tr> 34</c:forEach> 35</table> 36</body> 37</html>

test02jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3<!DOCTYPE html> 4<html> 5<head> 6<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7<script type="text/javascript" src="../js/dialog.js" charset="UTF-8"> 8</script> 9<title>Test</title> 10<script type="text/javascript"> 11<!-- 12 13function register() { 14 if(window.confirm('登録')){ 15 return true; 16 } 17 else{ 18 return false; 19 } 20} 21 22// --> 23</script> 24 25</head> 26<body> 27<h1>Test</h1> 28<p>詳細</p> 29<form action = "./Test02" method = "post" onSubmit="return register()" > 30<font color="red">tet1</font> 31<c:forEach var="info" items="${en}" varStatus="status"> 32<font color="red">tet2</font> 33<input type="hidden" name="empId" value="${info.id}" > 34<font color="red">tet3</font> 35<table border = 1> 36<tr><td>name</td><td><input type = "text" name = "name" value="${info.name}" ></td></tr> 37</table> 38</c:forEach> 39<input type = "submit" value = "toroku"> 40<a href="./Test01"> <button type="button">modoru</button></a><br> 41</form> 42</body> 43</html>

Test02java

1@WebServlet(name = "Test02", urlPatterns = {"/Register"}) 2public class Register extends HttpServlet { 3 private static final long serialVersionUID = 1L; 4 5 6 @Override 7 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 8 HttpSession session = request.getSession(); 9 request.setCharacterEncoding("UTF-8"); 10 if(request.getParameter("eid") != null){ 11 int id = Integer.parseInt(request.getParameter("id")); 12 Dao dao = new Dao(); 13 ArrayList<Info> Info = dao.selectid(id); 14 request.setAttribute("en", Info); 15 } 16 17 18 request.getRequestDispatcher("/WEB-INF/jsp/test02.jsp").forward(request, response); 19 } 20 21 @Override 22 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 23 //省略 24 } 25 26}

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

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

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

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

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

guest

回答3

0

Test02.jsp で判断するならば、?以降のパラメータ(これをQueryString:クエリ文字列と呼びます)があるかどうかで判断はできます。

http://www.javaroad.jp/servletjsp/sj_jsp6.htm の getParameter(String) を参照してください。

ただし、JSPで判断するのはクエリ文字列で判断するのではなく、サーブレット内で取得してリクエスト属性に一時格納している request.setAttribute("en", Info); がJSP内で参照できた場合と、そうでない場合とで処理をわけるように実装を変更したほうが良いかと思います。

投稿2020/01/28 04:57

A-pZ

総合スコア12011

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

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

moyashikun

2020/01/28 07:55

ありがとうございます >ただし、JSPで判断するのはクエリ文字列で判断するのではなく、サーブレット内で取得してリクエスト属性に一時格納している request.setAttribute("en", Info); がJSP内で参照できた場合と、そうでない場合とで処理をわけるように実装を変更したほうが良いかと思います。 こちらの処理方法、スクリプトレットを使わずにJSTLのみで記述するにはどうしたらよいのでしょうか <c:if test=((var="en")!=null)> このように記述してみてもエラーがでます
guest

0

ベストアンサー

"?id=foo"の名前はリクエストパラメータです。
そしてJava EEであればJSPでのリクエストパラメータの値は
暗黙オブジェクトとしてparamに設定されています。

今回の場合はパラメータの名前がidなので${param.id}で取得できるとは思いますが、
処理を見たところTest02.javaでidがある場合のみenを設定しているので、
その値で処理を分岐させてもいいのではないかと思います。

投稿2020/01/28 04:49

yureighost

総合スコア2183

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

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

moyashikun

2020/01/28 07:57

名前を教えていただきありがとうございます idがない場合はnullを入れるようにしてみました
guest

0

<c:if test="${empty en}">で配列がnullかそうでないかでの分岐ができました
ベストアンサーは悩みましたが、お二方に高評価つけさせていただきました
ありがとうございました

投稿2020/01/28 15:32

moyashikun

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問