- PR -

Linux上でStrutsタグライブラリの属性にスクリプトレットで値を与える方法について。

1
投稿者投稿内容
忍者鳥取県
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 61
お住まい・勤務地: リオネジャネイロの地下6000Km
投稿日時: 2003-09-09 14:46
―――――――――――――――――――――――――――――――――――
【開発環境】
統合開発環境:Eclipse2.0.2 (WindowsXP)
JDK: j2sdk1.4.1_03
フレームワーク: Struts1.1rc1(MVC形式)
Webサーバ: Apache1.3.28
サーブレットコンテナ: Tomcat4.0.6
DBサーバ: MiracleLinux2.1
DB: Oracle9i
接続プール:javax.sql.DataSourceを利用
―――――――――――――――――――――――――――――――――――

 現在上記のような環境でStrutsを用いて開発を行っています。
 XPで作成したソースを、MiracleLinux上に移動させテストを
 行っています。XP上で下記のようなタグの記述でローカルで動かしている
 場合は問題なく動作しますが、

 <bean:define id="sexCode" value="<%= rs.getString("SEX_CODE") %>" />
<logic:equal name="sexCode" value="F">女</logic:equal>
<logic:equal name="sexCode" value="M">男</logic:equal>

 MiracleLinux上で同じソースを動かすと
 
 org.apache.jasper.compiler.ParseException: /KensaKekka.jsp(81,74)
 属性 SEX_CODE には値が指定されていません

 といったエラーが出力されます。ResultSetからデータがうまくとりだされて
 いないのかと思い。<%= rs.getString("SEX_CODE") %>の内容を表示させましたら、
 期待したデータを取得することができました。taglibのパスがおかしいのかと
 思いましたが設定も問題ありませんでした。
 (一応簡単なStrutsタグを使って動作確認しました。)
 
 どなたか原因がお分かりでしたら、御教示お願いします。


 P.S.本文とは関係ありませんが、このIT会議室で複数のキーワードを入れて
     検索を行っても結果がゼロ件になってしまうのですが、複数同時に指定して
     検索を行うことはできないのですか?

[ メッセージ編集済み 編集者: 忍者鳥取県 編集日時 2003-09-09 14:47 ]

[ メッセージ編集済み 編集者: 忍者鳥取県 編集日時 2003-09-09 16:33 ]
ニシトミ
ベテラン
会議室デビュー日: 2003/04/24
投稿数: 76
お住まい・勤務地: 千葉・東京
投稿日時: 2003-09-09 16:23
こんにちは
ニシトミです。

DB操作をしているクラス内でResultSetを生成した
Statementがクローズされていませんか?

taglibやStrutsには、疎いのでなんともいえませんが
JSP内でResultSet使うの、やめて
DBメソッド内でBean配列生成で
JSPでget表示などでは、だめなのでしょうか?


[ メッセージ編集済み 編集者: ニシトミ 編集日時 2003-09-09 18:02 ]
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2003-09-09 20:33
ありがちなことですが、JSPのファイルの文字コードが
SJISからEUC-JPになったというのはどうでしょうかね。
忍者鳥取県
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 61
お住まい・勤務地: リオネジャネイロの地下6000Km
投稿日時: 2003-09-10 10:34
引用:

ニシトミさんの書き込み (2003-09-09 16:23) より:
こんにちは
ニシトミです。

DB操作をしているクラス内でResultSetを生成した
Statementがクローズされていませんか?

taglibやStrutsには、疎いのでなんともいえませんが
JSP内でResultSet使うの、やめて
DBメソッド内でBean配列生成で
JSPでget表示などでは、だめなのでしょうか?




早速のご返事ありとうございます。この例ではJSPでResultSetを使いまわして
おりますが、現在JSP中にResultSetを入れないように変更しています。
とりあえず、Statementはクローズしてないみたいです。
忍者鳥取県
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 61
お住まい・勤務地: リオネジャネイロの地下6000Km
投稿日時: 2003-09-10 10:36
引用:

小僧さんの書き込み (2003-09-09 20:33) より:
ありがちなことですが、JSPのファイルの文字コードが
SJISからEUC-JPになったというのはどうでしょうかね。



その辺りは大丈夫だと思います。
忍者鳥取県
ベテラン
会議室デビュー日: 2003/08/28
投稿数: 61
お住まい・勤務地: リオネジャネイロの地下6000Km
投稿日時: 2003-09-10 10:39
解決と言うかなんというか・・・(・_・)フフ

下記のようなコーディングにするとLinux上でも正常に動作することが
確認できました。

<% String SEX_CODE = rs.getString("SEX_CODE"); %>
<bean:define id="sexCode" value="<%= SEX_CODE %>" />
<logic:equal name="sexCode" value="F">女</logic:equal>
<logic:equal name="sexCode" value="M">男</logic:equal>

ご協力いただいた方々どうもありがとうございました。m(_ _)mペコリンコ
PAL
ベテラン
会議室デビュー日: 2002/11/14
投稿数: 63
投稿日時: 2003-09-12 19:40
引用:

解決と言うかなんというか・・・(・_・)フフ
下記のようなコーディングにするとLinux上でも正常に動作することが
確認できました。
<% String SEX_CODE = rs.getString("SEX_CODE"); %>
<bean:define id="sexCode" value="<%= SEX_CODE %>" />
<logic:equal name="sexCode" value="F">女</logic:equal>
<logic:equal name="sexCode" value="M">男</logic:equal>


これって、マルチスレッドの際、大丈夫なんでしょうか?
http://www.atmarkit.co.jp/fjava/rensai2/webopt04/webopt04.html
とか。<!% じゃ無ければ、大丈夫って事でしょうか?

setattribute関係だと、struts-config.xmlでredirect=trueになっていないか等の
確認も必要だと思います。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-09-12 20:30
引用:

PALさんの書き込み (2003-09-12 19:40) より:
これって、マルチスレッドの際、大丈夫なんでしょうか?
http://www.atmarkit.co.jp/fjava/rensai2/webopt04/webopt04.html
とか。<!% じゃ無ければ、大丈夫って事でしょうか?



<% %>で囲まれた部分(スクリプトレット)は、_jspServiceメソッド内に展開されます。
つまり、ここでのSEX_CODEはローカル変数になっていますので、スレッド間の排他制御を
気にする必要はありません。

<!% %>で囲まれた部分(宣言)はメソッドの外に展開されます。つまりインスタンス変数や
クラス変数になりますので、注意が必要です。

JSPの各部分がどう展開されるかは、展開されたソースを読んでみるといいですよ。
1

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