- PR -

include を for文内で作成

投稿者投稿内容
tnk
会議室デビュー日: 2003/05/07
投稿数: 9
投稿日時: 2003-05-07 13:03
Java,JSP初心者です。

<%@ include%>を使用して、
幾つかのファイルをインクルードしたいのですが、
条件に応じてインクルードしたいファイル数が
変えられるものを作ろうと思っています。

一応↓こんな感じをイメージしているのですが、
エラーがでてしまい、やり方がよくわからなくて困っています。
根本的に間違っているのでしょうか?
-------------------------------------------------------
<%
for(int i = 0; i < fileName.length; i++)
{
if(fileName[i] != "")
{
%>
<%@ include file=fileName[i] %>
<%
}
}
%>
-------------------------------------------------------
初歩的な質問で申し訳ございません。

どなたかご教授いただけると幸いです!
よろしくお願いします。
amnaky
ベテラン
会議室デビュー日: 2002/09/13
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2003-05-07 14:49
どういうエラーが出ますか?

インクルードされるファイルでも
pageディレクティブでcontentTypeを指定しているとか?
zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 2003-05-07 14:52
それが出来ると一見便利そうですが・・・。
まずは出力されているエラーを提示してください。

本来出力されるページの制御はサーブレット側で選択するべきですので、
基本的なロジックを見直すようにしてください。

また、次のステップ(?)としてjakartaのtaglibを使うことをお勧めします。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2003-05-07 15:53
<%@include%>って、静的インクルード(jsp -> java変換時に取り込んでコンパイルされる)だから、動的にインクルードしたりしなかったりってのは無理では?
<jsp:include>にするか、最初から全部静的インクルードしてしまって、表示する/しないを動的に変えるかのどちらかしかないと思いますが。

#個人的には、zaxx_MDのいうように、taglibがお勧めです
tnk
会議室デビュー日: 2003/05/07
投稿数: 9
投稿日時: 2003-05-07 19:58
皆様、お返事ありがとうございます!

>どういうエラーが出ますか?
エラーは次のようなものが出ています。
エラー文言:「JSP ファイル "./funcModule/" が見つかりません」

以下のようにinclude文だけを単独で実行すると成功するのでファイルが
存在しないとかいった単純ミスではなさそうなんです。
実行できたプログラム:<%@ include file="./funcModule/" + fileName[0] %>

>インクルードされるファイルでも
>pageディレクティブでcontentTypeを指定しているとか?
page記述はしていません。
次のようなJSPプログラムの一部を記述してあるだけです。
で、ファイル名には拡張子をつけていません。
<%
out.println("someMoji");
%>


>出力されるページの制御はサーブレット側で選択するべき
??ひょっとしてJSPでやろうとしている時点で根本的に間違っているのでしょうか?
以下のようなことがやりたいだけなんですが。。。これはサーブレットでするべきなんですか?
1 ->HTML(formのparamをpost)
2 ->JSPでparamを受け取り内容によって出力するHTMLを一部変換
3 ->HTML出力


とりあえず、t-waveさんに提案いただいた<jsp:include>で試してみて、
だめなら次にtablibを使ってみます。ところでtaglibですが、こういった場合は
どのようなものが提供されているのでしょうか?
すいません初心者すぎてっ。。。汗;
amnaky
ベテラン
会議室デビュー日: 2002/09/13
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2003-05-07 23:11
>エラーは次のようなものが出ています。
>エラー文言:「JSP ファイル "./funcModule/" が見つかりません」
>実行できたプログラム:<%@ include file="./funcModule/" + fileName[0] %>

fileNameという配列に、NULLか""が混じっているのでは?
とりあえずfor文の中で途中経過を出力してみるといいかも。

サーブレットですべきかどうかは、規模や要件によると
思います。
そのへんはMVCとかMVCモデル2といったキーワードを
調べるとよいと思います。

あとは、
<jsp:include>と、<@include>
の違いとか。

タグライブラリは補完的にしか使ったことがないので
何とも。便利だなとは思いました。
zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 2003-05-08 11:31
引用:

2 ->JSPでparamを受け取り内容によって出力するHTMLを一部変換


変だと思います。amnakyさんのおっしゃる通りです。

引用:

エラーは次のようなものが出ています。
エラー文言:「JSP ファイル "./funcModule/" が見つかりません」



JSPに関しては昔からあるJSP "Tiny Samples"というページがお気に入りなのですが、
>><%@ inlude 〜 %>の方は、JSPファイルの初回起動時に読み込まれます。
と書いてあります。
ということは実行時にfileName[0]に値が入っていたとしても
ページ構成の初期処理ではfileName[0]にはデータが入っていないと思われるので
ロジックでどうがんばっても、結果は変わらないと思います。
tnk
会議室デビュー日: 2003/05/07
投稿数: 9
投稿日時: 2003-05-08 13:58
皆様、色々ご教授くださりありがとうございます。
<jsp:include>の使用で 'なんとか' 思い通りの実行が出来ました!

ソース--------------------------------------------
<%
for ( int i = 0; i < fileName.length; i++)
{
if(fileName[i] != "")
{
%>
<jsp:include page="<%= fileName[i]%>" flush="true" />
<%
}
}
%>
--------------------------------------------

結局、皆さんのご指摘のように
<%@ include%><jsp:include />の処理手順の違いが原因でした。
ほんと勉強不足でした。汗;


最後に、
スレッドのタイトルから少しずれる質問で申し訳ないのですが、
<jsp:include />のpage属性のsyntaxについて
fileName[i]の対象ファイルをサブフォルダに入れようと
以下のような書き方に変えると、エラーも出ずに無反応になります。
ソース--------------------------------------------
<jsp:include page="./funcModule/ + <%= fileName[i]%>" flush="true" />
--------------------------------------------
ちなみに、「無反応」というのは正常にHTMLが表示されているのですが、
どーも、include文のところだけ無視されているような感じなのです。
あと、これさえ出来ればとりあえず完成なのですが。。


<jsp:include>を色々調べていたらSunのサイトでSyntaxの説明があったのですが、
次のようになっていました。
Syntax--------------------------------------------
<jsp:include page="{relativeURL | <%= expression %>}" flush="true" />
--------------------------------------------
これはつまるところ、
relativeURL か <%= expression %> のどちらかを使え、ということであって
relativeURL と <%= expression %> は併用できないってことなんでしょうか?
すいません。Syntaxもよく読めないんです。
relativeURL と <%= expression %>の併用をされた例とかお持ちでしたら
ご教授ください。

Sunのさいと:http://java.sun.com/products/jsp/syntax/1.1/syntaxref1112.html

すいません。また、長々と書いてしまいました。


スキルアップ/キャリアアップ(JOB@IT)