- PR -

include を for文内で作成

投稿者投稿内容
zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 2003-05-08 14:16
ご自分で気づくかもしれませんが一応・・・
コード:

<jsp:include page="./funcModule/<%= fileName[i]%>" flush="true" />


それより、これではどうでしょうか?
コード:

<%
String filePath="./funcModule/";
for ( int i = 0; i < fileName.length; i++)
{
if(fileName[i] != "")
{
%>
<jsp:include page="<%= filePath.concat(fileName[i])%>" flush="true" />
<%
}
}
%>





[ メッセージ編集済み 編集者: zaxx_MD 編集日時 2003-05-08 14:23 ]
tnk
会議室デビュー日: 2003/05/07
投稿数: 9
投稿日時: 2003-05-08 15:32
zaxx_MDさんありがとうございます。

>ご自分で気づくかもしれませんが一応・・・
>コード:
>-------------------------------------------------------------------------------
>
><jsp:include page="./funcModule/<%= fileName[i]%>" flush="true" />
>
>-------------------------------------------------------------------------------

う、勉強不足ではずかしいです。。。
しかし、↑これはやってみたのですがエラーこそ出ないものの、
やはり無反応でした。。。。ToT
そこで、以下の方を使用したら実行に成功しました!

>コード:
>-------------------------------------------------------------------------------

>String filePath="./funcModule/";

><jsp:include page="<%= filePath.concat(fileName[i])%>" flush="true" />

>-------------------------------------------------------------------------------

こちらの方がパス変更の可能性とかを考えると実用的ですね。
色々とご教授ありがとうございました!

なぜ、↓これが動かないのかはもう少し調査してみます。
<jsp:include page="./funcModule/<%= fileName[i]%>" flush="true" />
amnaky
ベテラン
会議室デビュー日: 2002/09/13
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2003-05-08 18:33
>Syntax--------------------------------------------
><jsp:include page="{relativeURL | <%= expression %>}" flush="true" />
>--------------------------------------------
>これはつまるところ、
>relativeURL か <%= expression %> のどちらかを使え、ということであって
>relativeURL と <%= expression %> は併用できないってことなんでしょうか?

私ならそう解釈します。
ご指摘のサイトにも
The relative URL that locates the file to be included, or an expression that evaluates to a String equivalent to the relative URL.
と書いてありますし。

無理矢理そういうことをするならば、
page="<%="./funcModule/" + fileName[i]%>"
となるかな?
tnk
会議室デビュー日: 2003/05/07
投稿数: 9
投稿日時: 2003-05-09 12:10
>無理矢理そういうことをするならば、
>page="<%="./funcModule/" + fileName[i]%>"
>となるかな?

amnakyさんご教授ありがとうございます。
ご指摘の方法でも実行できました!

一度以下のような記述で失敗していたので、先述のSunのサイトで言われているように
relativeURL と <%= expression %> の併用は不可なのだと思い込んでました。
単に書き方が誤っていただけだったんですね。
ソース-------------------------------------
<jsp:include page="<%='./funcModule/' + fileName[i]%>" flush="true" />
------------------------------------------
この場合、何を血迷ったか、
page の属性値は「"」ダブルクォーテェーションで括るものだと認識していたので
relativeURL と <%= expression %>が混合する場合、
relativeURLを「'」シングルクォーテェーションで括っていました。。。。

でも、amnakyさんご指摘の方法だと「./funcModule/」が
「"」の外に剥き出しに放置されてるように見えるのですが、問題ないのでしょうか?
実行できてるのがちょっと不思議です。すいません、質問が素朴すぎて。。
amnaky
ベテラン
会議室デビュー日: 2002/09/13
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2003-05-09 14:15
>relativeURL と <%= expression %> の併用は不可なのだと思い込んでました。
>単に書き方が誤っていただけだったんですね。

いや、やはり併用はできないんですよ。
どちらかしか使用できません。

page="<%="./funcModule/" + fileName[i]%>"
というのは、

"./funcModule/" + fileName[i]の結果作られる
一つのStringをpage属性に渡していることになります。
仮にファイル名がfoo.jspならば、
"./funcModule/foo.jsp"
という文字列が渡されることになります。

<%
String str = "./funcModule/" + fileName[i];
%>
<jsp:include page="<%=str%>"/>

としているのと同じことです。

<jsp:include page="<%="a" + "b" + "c" + "d.jsp"%>"/>
なんていうこともできるし、
<jsp:include page="<%=new String("a" + "b.jsp")%>"/>
としても動きます。いい悪いはおいとくとして。


'<%='と'%>'の間は、
JSP中でout.print("...")とやるときの、
'print('と')'の間と同じと考えてみるとわかりやすいかも。

説明するのは難しいですねえ。
私は迷った時はJSPの仕様書を眺めます。けっこうわかりやすく
書いてありますよ。
http://java.sun.com/products/jsp/download.html#specs

[ メッセージ編集済み 編集者: amnaky 編集日時 2003-05-09 14:17 ]
tnk
会議室デビュー日: 2003/05/07
投稿数: 9
投稿日時: 2003-05-12 11:19
amnakyさん、またまたご教授ありがとうございます!

>いや、やはり併用はできないんですよ。
>どちらかしか使用できません。
>--以下略--

なるほどぉ。。わかりやすい説明ありがとうございます。
とっても良くわかりました。


>'<%='と'%>'の間は、
>JSP中でout.print("...")とやるときの、
>'print('と')'の間と同じと考えてみるとわかりやすいかも。

これも、なるほどです。こう考えるとわかりやすいですね。^^
でも、やっぱり腑に落ちない点が一点だけ残ってます。
ちょっとしつこくなってきたんですけど、
お付き合い頂けるとうれしいです。

私はJava言語の前はScript系言語をやってたのですが、
quotes は必ずセットで使用することという仕様で、
「"」が出現すると直ぐ次に記述されている「"」と対として
認識されるとかいうものでした。

頭では理解しても、以下の記述だと"<%="と" + fileName[i]%>"が
セットで ./funcModule/ がどうしてもはみ出ているように見えてしまいます。
ソース------------------------------------------
page="<%="./funcModule/" + fileName[i]%>"
------------------------------------------------

>説明するのは難しいですねえ。
>私は迷った時はJSPの仕様書を眺めます。けっこうわかりやすく
>書いてありますよ。
>http://java.sun.com/products/jsp/download.html#specs

ご指摘のサイトに行ってみました。
わかりやすいかどうかはともかくとして、
たぶん以下の章をみればいいのかと思うのですが。。。
※まちがってたらご指摘ください。

引用--------------------------------------------
JSP.1.6 Quoting and Escape Conventions
------------------------------------------------

この章のサンプルでは、以下のように "<%= "hi!" %>" がillegalだと
書いてあって。。。う〜ん、混乱してきた。

引用--------------------------------------------
Examples
The following line shows an illegal attribute values.
<mytags:tag value="<%= "hi!" %>" />
------------------------------------------------

ちょっと、細かいところまで首を突っ込みすぎですね。私。。。
amnaky
ベテラン
会議室デビュー日: 2002/09/13
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2003-05-12 11:57
それはおそらくExpression Languageという、タグライブラリ
で使用する新しい表現方法についての説明だと思います。

仕様書中では、"Expressions"の項目を参照してください。

確かに見た目上
page="<%="./funcModule/" + fileName[i]%>"
は気持ち悪いですよね。

page属性にとっての""と、<%=%>にとっての""は
意味が違うことは確かですね。
page属性としては、結果的に生成された文字列を
もらうだけなので、<%=から%>までのことは関知しない
というイメージでしょうか。

まあ、私も厳密に理論的バックグラウンドがあって
言ってるわけじゃないので、やはり仕様書もしくは
市販のJSP本にあたることをオススメします。
tnk
会議室デビュー日: 2003/05/07
投稿数: 9
投稿日時: 2003-05-14 10:38
amnakyさんありがとうございます!

>page属性にとっての""と、<%=%>にとっての""は
>意味が違うことは確かですね。

細部までつっこんで質問してしまいました。
なるほど、意味が違うってことだとすっごい自分の中で理屈がとおります。
どう違うのかは、また地道に探し出しておきます。


先述の仕様の"Expressions"の項では、
「とにかくexpression部分はStringで書け。」のような感じで、amnakyさんの言われる
意味の違いってのは良くわかりませんでした。。
引用―――――――――――――――――――――――――――――――――――――――
An expression element in a JSP page is a scripting language expression that is
evaluated and the result is coerced to a String. The result is subsequently emitted into the current out JspWriter object.
―――――――――――――――――――――――――――――――――――――――――

>やはり仕様書もしくは
>市販のJSP本にあたることをオススメします。

ご指摘のとおり、なんらかの本などをあたってみます。
ほんと、「自分で調べてからもの申せ」ですよね。^^;

いろいろ、ご丁寧にありがとうございました!

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