- PR -

Strutsタグのについて

1
投稿者投稿内容
にぃにぃ
ベテラン
会議室デビュー日: 2006/10/19
投稿数: 70
投稿日時: 2007-06-01 17:14
お世話になります。すいません。Strustのタグの仕様なのですが、

<bean:define id="num1" name="test1" type="java.lang.Integer" />
<bean:define id="num2" name="test2" type="java.lang.Integer" />
<logic:equal name="num1" value="<bean:write name="num2"/>" >
<bean:write name="num2" />
</logic:equal>

とすると、「等号記号が必要です」というエラーが発生します。
Integer同士の比較なのですが、どうしてエラーが出るのか分かりません。
色々検証して
<logic:equal name="num1" value="<%= num2.toString() %>" >
<bean:write name="num2" />
</logic:equal>
とすると正常に処理されますが、上下のコードには何か違いがあるのでしょうか。
上下ともオブジェクト同士の比較だと認識しているのですが、
間違いでしょうか。
ポッキー
会議室デビュー日: 2005/01/26
投稿数: 6
投稿日時: 2007-06-01 17:25
あんまり詳しくないのですが、たぶんこういうことじゃないでしょうか。
<logic:equal name="num1" value="<bean:write name="num2"/>" >
"(ダブルクォーテーション)で囲まれると固定文字になる
なので実際には
num1の中身とnum2の中身の比較
ではなく
num1の中身と<bean:write name=(という文字列)
での比較になるのではないでしょうか
Daimyo_Jin
会議室デビュー日: 2007/02/03
投稿数: 1
投稿日時: 2007-06-01 17:29
<logic:equal name="num1" value="<bean:write name="num2"/>" >

Strutsタグの中にStrutsタグを入れられなかったと思います。
上記の場合だと、valueには ""で囲まれた文字列『<bean:write name=』が格納されて
その文字列と name指定されたものが判定されてことになると思います。
(そもそも、『<bean:write name=』 以降の『num2"/>"』が logic:equalの構文に
当てはまってないので、エラーになると思いますが....)

ですので、bean:defineで定義した変数の値をStrutsタグで使用したい場合は
初心者マークさんが2つ目に書かれているように
 <logic:equal name="num1" value="<%= num2.toString() %>" >
と、JSPの式などで指定あげれば うまくいくと思います。

追記:
 <logic:equal name="num1" value="<bean:write name="num2"/>" >が
 <logic:equal name="num1" value="<bean:write name='num2'/>" >とした場合でも
valueには文字列『<bean:write name='num2'/>』が格納され、num1と比較となると思います。
(Strutsタグの中にStrutsタグを....の理由付けがちょっとずれてたので追記しました。)


[ メッセージ編集済み 編集者: Daimyo_Jin 編集日時 2007-06-01 17:52 ]
1

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