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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

3182閲覧

JSPのincludeディレクティブのpageの引数について

houki

総合スコア22

JSP

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/05/19 13:41

編集2020/05/19 14:19

前提・実現したいこと

変数htmlPathにpathを入れて<jsp:include page="${htmlPath}" flush="true"/>みたいな感じで.htmlを挿入したいです.
そもそも変数を使ってincludeディレクティブで挿入ができるのか分からないのですが...

複数あるhtmlファイルのうち条件分岐で1つだけ挿入します.
条件分岐で<jsp:include page="~.html" flush="true"/>を複数書くのが面倒なので,
htmlPathにpathを格納して,最後に1つの<jsp:include page="${path}" flush="true"/>を書いてhtmlファイルを挿入したいのですが,何も表示されなくて困っています.

そもそも書き方が間違っているのかしれないのですが,書き方を教えていただけると嬉しいです.
また,一般的には私が書こうとしている変数を使った書き方ではなくて,1つ1つ".html"や".jsp"みたいに書くものでしょうか.

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

エラーはありません.

該当のソースコード

JSP

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ page import="java.util.*" %> 4 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>サンプル</title> 10</head> 11<body> 12 <div> 13 <h2>ハローワールド</h2> 14 <%!String a="AAA.html"; %> 15 <%!String b="BBB.html"; %> 16 <%!String c="CCC.html"; %> 17 18 <%--以下の直接pathを書き込むと,文章が挿入されます.--%> 19 <jsp:include page="AAA.html" flush="true"/> 20 <jsp:include page="BBB.html" flush="true"/> 21 <jsp:include page="CCC.html" flush="true"/> 22 23     <%--以下の変数を使ってのディレクティブでは,何も表示されません--%><%--実現したい形は下のような変数を使った挿入--%> 24 <jsp:include page="${a}" flush="true"/> 25 <jsp:include page="${b}" flush="true"/> 26 <jsp:include page="${c}" flush="true"/> 27 28 </div> 29 30</body> 31</html>

HTML

1<%--AAA.html--%> 2<div style="text-align: left;"> 3<p>Hello.world</p> 4 5</div>

試したこと

上記のソースコードが自分が試した結果です.(変数を使ってのやり方だと表示されません.)
jspファイル内の適当な場所で
"${a}"
"${b}"
"${c}"
を入れて動かしてみると
""
""
""
となり,
<jsp:include page="${a}" flush="true"/>
<jsp:include page="${b}" flush="true"/>
<jsp:include page="${c}" flush="true"/>
の${a}などは空白で正しく参照できていないのかもしれません.

また,こちらはエラーが出たもので試したことですが
<jsp:include page=${a} flush="true"/>→「引用符を入れろというエラーが出ます(""ダブルクォーテーションと認識しています.)」
<jsp:include page=<%=a%> flush="true"/>→「この書き方はできないそうです.」

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

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

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

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

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

m.ts10806

2020/05/19 13:54

変数自体は正しく参照できるのでしょうか。
houki

2020/05/19 14:06 編集

"${変数}"で正しく参照できているのかはよくわかりません. jsp内の適当な場所で "${a}" "${b}" "${c}" を入れて動かしてみると "" "" "" 中身は空でした.m.ts10806さんの言う通り,正しく参照できていないということですかね. エラーはpage="${}"の書き方でエラーは出てないので正しく参照はできているものと考えていましたが... この場合はどうすると正しく参照されるのか教えていただけますか?
退会済みユーザー

退会済みユーザー

2020/05/19 14:08

スクリプトは許可されてたはずだけど式は許可されていたっけ?
houki

2020/05/19 14:16

asahina1979さん, ${}のことでしょうか? 「式言語(Express Language)は、JSPの特徴であるデザイナとプログラマの分業を進めるために導入されたJavaコードを簡易に表現する方法です。 式言語を使用することで、より簡潔にHTMLファイルの中にプログラムを記述することができるようになります。 式言語では${ }で変数を参照します。」(以下のサイトから参照) https://www.google.com/search?q=%E5%BC%8F%E8%A8%80%E8%AA%9E%E3%81%A8%E3%81%AF&rlz=1C5CHFA_enJP897JP898&oq=%E5%BC%8F%E8%A8%80%E8%AA%9E%E3%81%A8%E3%81%AF&aqs=chrome..69i57.2555j1j7&sourceid=chrome&ie=UTF-8
退会済みユーザー

退会済みユーザー

2020/05/19 14:32

例えばJSP全盛のころは struts のタグライブラリに struts-taglib (EL 式 使用不可能、スクリプトレット利用可能) struts-el-taglib (EL 式 使用可能、スクリプトレット利用可能) のように EL式の仕様が制限されているものがあるのよ
houki

2020/05/19 14:51

今のところ,変数を使った記述方法はないのでしょうか? 直書きするのが一般的なのでしたら,直書きしようと思います.
m.ts10806

2020/05/19 20:31

一般的かどうかは別として、1回setしてgetする必要がある気がしないでもないですね。 それか、コントローラ側から渡すか。
退会済みユーザー

退会済みユーザー

2020/05/19 23:53

>> この書き方はできないそうです JSP というか XMLの基本だけど 属性値は 二重引用符で囲う必要がある。 ※ HTML は XML の規格の範疇外です。 なので XHTML という規格がでた あと一般的なのは、宣言と使用はレベルを合わせる。(処理の順番の問題を起こさないために)
houki

2020/05/20 01:30 編集

m.ts10806さん,asahina1979さん, <jsp:include page="<%=a%>" flush="true"/>←""を付けたら動きました この書き方で正しく表示され,私の悩みはELを使わないやり方で解決されました! ありがとうございます. ELでの参照の可否問題はm.ts10806さんの仰っていたsetを使って以下のようにしないと参照できないようでした. たとえばServletなどで request.setAttribute("age", "25"); という処理を行っていた場合、JSP上で ${age} とすることでブラウザで 25 と表示されます。 (以下参照リンク) https://qiita.com/chihiro/items/50131e8488e1b0cd1cdd
houki

2020/05/20 01:02

asahina1979さん, 最後の「一般的なのは、宣言と使用はレベルを合わせる。(処理の順番の問題を起こさないために)」の「宣言と使用はレベルを合わせる。」の意味を具体的にどんなことなのか教えてもらえませんか? 変数のスコープを最小にするということと解釈していて,「当該のソースコード」の変数a,b,cの宣言箇所は正しいと思っているのですが,どういうことなのか示していただけると幸いです.
退会済みユーザー

退会済みユーザー

2020/05/26 11:48

スクリプトレットを利用するなら el 式 を利用しない。 el 式を使うならスクリプトレットを利用しない。
退会済みユーザー

退会済みユーザー

2020/05/26 11:50

プログラムとして正しいかどうかというより 設計として正しいかどうかの方だね。 ちゃんと思った通りに宣言されてるの?って辺り。 スクリプトレットの宣言のしかたによってメソッド内変数になったり。 インスタンス変数になったりするので
guest

回答1

0

自己解決

<jsp:include page="<%=a%>" flush="true"/>←""を付けたら動きました
この書き方で正しく表示され,私の悩みはELを使わないやり方で解決されました!

投稿2020/05/26 11:31

houki

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問