アプリ版:「スタンプのみでお礼する」機能のリリースについて

初めまして、etsuki_genと申します。
こちらの掲示板ではいつもお世話になっております。
初の質問です。よろしくお願いいたします。

サーブレットとJSPを使用して現在仕事をしております。
サーブレットのコード内でjspファイルを指定し、
JSPにて出力したいと考えております。

詳細は以下に記述させていただきました。

【詳細】
■現在のJSPでのimport方法↓
<%@include file="aaa.jsp"%>

上記の"aaa.jsp"の部分を変数に変更し、
以下のように記述したい。

■変更したいimport方法↓
サーブレット側
a.putData("javaData","aaa.jsp");

JSP側
<% String strData=a.getData("javaData");%>
<%@include file=strData%>


変数を指定して、インクルードをしようとすると
「引用符が必要です」とエラー表記されてしまいます。

また、
<%@include file="<%=strData%>"%>
と記述しても、「<%=strData%>ファイルが見当たりません」と言われてしまいます。

JSPでimportを行う時に、importするファイル名を
変数で使用する方法はないものでしょうか?


過去ログにも見当たらなかった為、質問させていただきました。
よろしければご回答お願いいたします。
また、何かございましたらご指摘の程よろしくお願いいたします。

A 回答 (4件)

まず最初に#2の参考URL読みました?


それから#3の変換されたサーブレットの中身を見ました?
#3の補足を見る限りではサイトを見た、中身を見たということが感じられないのですが…。

小言は置いておいて
エラー内容からさっするに…
たんにJSPの記述ミスだと思われるのですが…

自分が試したJSPだと「引用符がどうの」というメッセージは表示されませんでした。
<body>タグの中に書いています。

で「動的にインクルード先を変えること」についてですが、結論から言うとできました。

インクルードするJSP名をセットしたHashMapを
「リクエストに格納」
してたのですが、これだとJSPではリクエストから格納されたHashMapを取得できませんでした。
(nullが返ってくる)
次に
「セッションに格納」
してみました。これだとJSPでセッションから格納されたHashMapを取得できました。

なんでリクエストじゃだめなのかが不明なので、気持ち悪いですが、とりあえず、サンプルを載せておきます。
(もしかしたらお作法的によい方法じゃないかもしれません。)

サーブレット
HashMap map = new HashMap();
map.put("jspname","include2.jsp");
req.getSession().setAttribute("map",map);

JSP
<%
HashMap map = (HashMap)(request.getSession()).getAttribute("map");
String jspname = "";
if(map != null){
jspname = (String)map.get("jspname");
}
%>
<jsp:include page="<%=jspname%>" flush="true" />
    • good
    • 0
この回答へのお礼

詳細な説明をありがとうございます。

変換されたサーブレットですが、変換される前に落ちてしまうため見ることができませんでした。
また、#2の参考URLは読ませていただいてます。

自分の理解不足、詳細不足より、小言を言われてしまっても仕方ないと思います。

セッションは、ご教授いただいて申し訳ないのですが、
仕事の関係上使用できないのです・・・。

また時間の関係上、今回はhtmlファイルにて行うことにさせていただきました。

ここまでお付き合いいただき、ありがとうございました!
今回ご教授いただいた内容は、今後生かしていきたいと思います。

お礼日時:2005/05/25 19:39

調べてはみたのですが…


どうも分からず…

エラーはページコンパイルで出ていますか?
そうであればjspから変換されたjavaファイルの中身を見てみるのもいいかと思います。

この回答への補足

わざわざ調べていただきありがとうございます。(><)

エラーは以下のようになっておりました。

doForward : javax.servlet.ServletException Error in JSP : /jsp/home.jsp
org.apache.jasper.JasperException: /jsp/home.jsp(96,19) 引用符が必要です

※home.jspとは、aaa.jspを呼び出すjspファイルです。

質問させていただいたimportは<body>~</body>タグの中に記述してあります。それが原因とは思えないのですが・・・。
尚、htmlファイルだと正常にimportされるので、もしかしたらjspファイルは<body>~</body>タグの中の記述だと読み込めないのでしょうか?

補足日時:2005/05/25 16:51
    • good
    • 0

インクルードディレクティブを使用すると、


JSPをサーブレットに変換する前に、
インクルードするファイルを読みに行きます。
ですので
<% String strData=a.getData("javaData");%>
<%@include file=strData%>
としても、

<%@include file=strData%>
↑で実際にインクルードするのはサーブレットの変換前、つまりページコンパイルもサーブレットが実行もされてもいないので、

<% String strData=a.getData("javaData");%>
↑の部分は実行されいません。

ですので、strDataというファイルがありませんよ。
となってしまうのです。

なぜインクルードするファイルを変数にしたいのか?
ということに対しての答えが
「インクルードするファイルを動的に変えたいから」
ということなら
インクルードアクション(<jsp:include>)
を使用してはいかがでしょうか?

参考URLにインクルードディレクティブとインクルードアクションの違いが載っています。
途中の図を見る限り動的にインクルードできると思います。
(試していないので間違っているかもしれません。)

参考URL:http://www.atmarkit.co.jp/fjava/rensai/jsp05/jsp …

この回答への補足

早速のご回答ありがとうございます。

>なぜインクルードするファイルを変数にしたいのか?
>ということに対しての答えが
>「インクルードするファイルを動的に変えたいから」
>ということなら
>インクルードアクション(<jsp:include>)
>を使用してはいかがでしょうか?

まさにその通りなのです!
そこで、いただいた回答を元に下記のように行ってみたのですが、「引用符が必要です」と言われてしまい、正常に動作いたしませんでした。

<jsp:include page="<%=cstrData%>" flush="true" />

もし、間違い等ございましたらご指摘願えませんでしょうか?

補足日時:2005/05/25 14:18
    • good
    • 0

実際に試してないのでヒント程度ですが・・。



ちょっとベタな方法ですが、

<%
if (××){
%>
<%@include ・・>
<%
} else {
%>
<%@include ・・>
<%
}
%>

みたいな形で変更するわけにはいきませんか?

後は、<jsp:include>でもダメでしょうか。
あるいは、式言語を使って、page="${××}"という形でもだめでしょうか。

・・ぱっと思いつくのはそれぐらいでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
返信が遅くなり、申し訳ございません。

Kyon2_PaPaさんのいう「ベタ」な方法は以前使用していた
やり方です。(汗)
現在ファイルの種類が多くなってしまったため、
動的にインクルードする方法を探していました。

>後は、<jsp:include>でもダメでしょうか
こちらは試してみたのですがうまくいきませんでした。jspファイルを読み込めないようです。

もう少し考えてみます。教えてくださりありがとうございました。

お礼日時:2005/05/25 15:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!