- - PR -
JSPスクリプトレット内でのスコープ変数の使用について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-11-29 17:15
こんばんは。
既存のJSPファイルをカスタマイズしながら、勉強しているのですが、スコープ変数とそのJSPファイル内でのスクリプトレットとの関係について教えていただきたく思っています。 コードを以下に示します。 ーーーーJSPファイル一部抜粋ーーーーー <jsp:useBean id="cp" class="java.lang.String" /> <c:set var="cp" value="${requestScope['article'].exp_date}" /> <%//以下、スクリプトレット 文字列から年月日を分割して取得する String year = cp.substring(0, 3); String month = cp.substring(5, 6); String date = cp.substring(8, 9); %> この部分において、java.lang.StringIndexOutOfBoundsException 例外メッセージ String index out of range: 3 が表示されてしまいます。 スクリプトレットに入る前に${cp}で確認してみたところ、値はうまく表示されていました。 何かスクリプトレットに入るところで問題があるのでしょうか? よろしくおねがいいたします。 |
|
投稿日時: 2007-11-29 17:41
スクリプトレット内でcpをSystem.out.printlnしてみるとなんと表示されますか?
|
|
投稿日時: 2007-11-29 17:44
nagise様、御返答ありがとうございます。
試してみましたところ、どうやらcpには何も格納されていないようです。 例外メッセージの意味はわかったのですが、スクリプトレット内では代入されたsetタグの式は無効なのでしょうか?? |
|
投稿日時: 2007-11-29 18:02
IndexOutOfBoundsExceptionは実際配列数よりインデックスのほうが大きい場合に発生します。
ところで、${cp}で表示される文字列はどのような形式でしょうか? たとえば、1月1日の場合、文字列が「2007/1/1」となっていれば、文字数が少なくなるため該当の例外が出る可能性があります。 |
|
投稿日時: 2007-11-29 18:08
GENZO様ありがとうございます。
はい、格納される値は”????年??月??日”という文字列です。 スクリプトレットに入る前にはしっかりcpの値は確認いたしました。 インデックスの方が大きくなるのは間違いないです。 やはりsetで代入した時の値が実際にスクリプトレットで表示されないことから、この前後が原因なのではないかと思うのですが。 |
|
投稿日時: 2007-11-29 18:17
スクリプトレットとJSTLで見てるものが違うことに今気がつきました。
String year = cp.substring(0, 3); じゃなくて ((String)pageContext.getAttribute("cp")).substring(0, 3); ですね。 ・・・でもcpはなぜコンパイルエラーにならないんだろう。 |
|
投稿日時: 2007-11-29 18:25
GENZO様、御早い返答ありがとうございます。
うまく動作いたしました。ありがとうございました。 調べてみましたところ、基本的なことができていなかったようです。 ありがとうございました。 cpはそのファイル内では使用していないのですが、エラーがでなかったのはよくわかりません。 |
1