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

JavaでStrutsを使用してJSP画面のインクルードを行う場合について

改修を行いたい画面では現在、他の画面をインクルードディレクティブを使用して呼んでいます。
今回、呼んでいる先の表示項目が固定でなく、条件により変更されるように変更したいと思っています。
しかし、インクルードディレクティブを使用すると、呼んでいる先の画面の表示項目に変数を使用できないときいたため、以下の修正を行い、変更後の画面を見たところ、呼んでいる先の画面が表示されていませんでした。

・インクルードアクションを使用して呼ぶように変更
(AAA.jspは呼んでいる先のJSP名))
変更前
(<%@ include file="AAA.jsp"%>

変更後
<jsp:include page="AAA.jsp" flush="true">
<jsp:param name="count" value="<%= count1 %>" />
<jsp:param name="count" value="<%= count2 %>" />
</jsp:include>

※count1,count2は、JSP内で定義している変数が設定されています。
と、変数を2つ使用しています。

、画面にエラーメッセージは表示されないため、原因について、記述内容を考えたのですが、改修を行った画面と呼んでいる先の画面は、同一フォルダ内にあるため、問題ないと考えています。

インクルードディレクティブからインクルードアクションに変更したのみで、ページのインクルードができなくなることってあるのでしょうか?

それとも、インクルードディレクティブとインクルードアクションの違いは
<%@ include file="AAA.jsp"%>

<jsp:include page="AAA.jsp" flush="true" />
だけではなく、別のところでも設定変更が必要なのでしょうか?

素人な質問で申し訳ありませんが、
・インクルードディレクティブからインクルードアクションに変更するときに画面が表示されなくなった理由
・インクルードディレクティブを使用して、呼んでいる先の画面から変数を取得する方法
のどちらかがわかる方いらっしゃいましたら教えてください。

ちなみに、
<jsp:include file="AAA.jsp" flush="true" />
だったとか、そういうミスはしていません。

A 回答 (1件)

参考になるかどうかわかりませんが、調べたところを報告します。



・ 今回strutsは使っていません。


>>> ・インクルードディレクティブからインクルードアクションに変更するときに画面が表示されなくなった理由

これは、strutsの処理の仕方に原因があるかもしれません。

>>> ・インクルードディレクティブを使用して、呼んでいる先の画面から変数を取得する方法


これの対処法は、リクエスト属性を使う方法ではダメなのでしょうか。つまり

<%
request.setAttribute("db", "DBA1");
%>
で渡して
<%=request.getAttribute("db") %>
で受け取る。

----------------------------------------------------------
インクルードディレクティブ側とインクルードファイルの双方向
インクルードアクション側とインクルードファイルの双方向
----------------------------------------------------------
いずれもうまく行くようだと私なりに確認しました。
(つまりオブジェクトは、普通に交換できる。)

これは、
>>> インクルードディレクティブを使用すると、呼んでいる先の画面の表示項目に変数を使用できない
の対処にも利用できるのではないでしょうか。

・ 後ひとつ追加することがあります。(これもどこかで間違っているかもしれませんが。)


それは、
「インクルードディレクティブの場合まさにソースコードを挿入した後に変換・コンパイルを行う。つまり、インクルードファイルのコードも同じメソッドで実行される。」
ということです。

この事により、
「インクルードファイルで宣言・代入した変数を、インクルードディレクティブでは宣言なしで使える。」
ということになります。

これは、まさに2番目の問いにぴったりです。

例として
----------------------------------------------------------
インクルードファイルに
<%int inc=100; %>
インクルードディレクティブ側に宣言をせずに
<%=inc%>
をコーディングします。
----------------------------------------------------------

もちろん単独では、インクルードディレクティブ側は、エラーとなります。
ところがインクルードファイルに変数incが存在すれば微妙なタイミングで、OKのようです。

以上、役に立つかどうかわかりませんが、試してみていただければ幸いです。
    • good
    • 0
この回答へのお礼

お返事遅れてすいません。

ご指摘の内容でやったところうまくいけました。

問題解決です。

どうもありがとうございました。

お礼日時:2008/03/02 17:22

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