- PR -

struts タグを用いて変数へ保持する方法

1
投稿者投稿内容
n.w
大ベテラン
会議室デビュー日: 2003/07/15
投稿数: 126
お住まい・勤務地: 神奈川
投稿日時: 2006-04-21 16:42
お世話になります。
strutsのlogicタグにてわからない点があるのですが
以下のように サーバー側で
// list -> java.util.List
request.setAttribute("fruitsList", list);
とセットしたものを画面に出力しています。
その際 bean:write にて出力しているidとnameは
正しく取得できていることができました。

問題点ですが、
取得したidとnameを使用し html:linkからURLを作成したく
<html:link href="hoge.do?hoge_id=※1">※2</html:link>
といった記述でく※1、※2の個所に変数としてbean:writeで
出力しているデータを使用したいのですが
String strId = id;
String strName = name;
のように変数に格納する手段がわかりません。
bean:parameter を使用し取得できるかと思いましたが
no-nameが出力されてしまいます。

こういった処理を行う場合どのようにするのが
望ましいのでしょうか?

コード:
<logic:iterate name="fruitsList" id="fruits" >
	<tr>
		<td>
			<br>
			<bean:write name="fruits" property="id" />
			<bean:write name="fruits" property="name" />
			<bean:parameter id="param2" name="name" value="no-name" />
			<bean:write name="param2" />				
			<br>
		</td>
	</tr>
</logic:iterate>

Lizua
会議室デビュー日: 2006/04/18
投稿数: 14
投稿日時: 2006-04-21 16:59
hiddenにpropertyを入れておいたらどうでしょうか。

iterateにINDEXキーは別に必要ないかもしれませんが、
回っているのでINDEXを保持しておくと便利かもしれません。


コード:

<logic:iterate name="fruitsList" id="fruits" indexId="idx">
<tr>
<td>
<bean:write name="fruits" property="id" />
<html:hidden name="fruits" property="id" indexed="true"/>
</td>
</tr>
</logic:iterate>



こんな感じで、どうでしょうか。
質問の意図と違っていたらすみません。


[ メッセージ編集済み 編集者: Lizua 編集日時 2006-04-21 16:59 ]

[ メッセージ編集済み 編集者: Lizua 編集日時 2006-04-21 17:06 ]
焼きそば
ベテラン
会議室デビュー日: 2002/11/06
投稿数: 86
お住まい・勤務地: 東京
投稿日時: 2006-04-21 17:16
引用:

n.wさんの書き込み (2006-04-21 16:42) より:
取得したidとnameを使用し html:linkからURLを作成したく
<html:link href="hoge.do?hoge_id=※1">※2</html:link>
といった記述でく※1、※2の個所に変数としてbean:writeで
出力しているデータを使用したいのですが
String strId = id;
String strName = name;
のように変数に格納する手段がわかりません。



String xxxと宣言しているということは、
スクリプトレット内で使用したいということでしょうか?
<bean:define>でダメですかね?
n.w
大ベテラン
会議室デビュー日: 2003/07/15
投稿数: 126
お住まい・勤務地: 神奈川
投稿日時: 2006-04-21 17:40
Lizuaさん、焼きそばさん 返答ありがとうございます。
日本語わかりにくかったようで申し訳ありません

当初考えていたのはスクリプトレット内での使用になりますが
hidden、defineどちらでも行えるようですね。
この場合hiddenにセットした際は、Javascpritにてlink のhref属性を作成
defineの場合は そのまま連結できそうです。

とりあえず当初の考えとおりスクリプトレットで行ってみたい
と考えていますが
// @
<bean:define id="hoge1" name="fruits" property="id" type="FruitListBean" toScope="request" />
<html:link href="hoge.do=?hoge_id='<%= hoge1 %>'" >aa</html:link>
色々と試していたのですがどうにもうまくとれません

@ 変数hoge1へFruitListBean型にて idを設定すると思っていたのですが
ど値がセットされません。
参考書片手に属性を設定しながら動作確認してますが
Iterator内でdefineを使用する場合どのようにすればよろしいのでしょうか?

[ メッセージ編集済み 編集者: n.w 編集日時 2006-04-21 17:40 ]
n.w
大ベテラン
会議室デビュー日: 2003/07/15
投稿数: 126
お住まい・勤務地: 神奈川
投稿日時: 2006-04-21 17:46
無事解決することができました
<html:link href="hoge.do?hoge_id=<%= fruits.getId(); %>" >aa</html:link>

としたところ 値が反映されていました。
一度変数へ格納する必要あるかとおもっていましたがIteratorで
指定したfruitsがそのまま使えることができました。

ありがとうございました
ina
ベテラン
会議室デビュー日: 2005/04/14
投稿数: 58
投稿日時: 2006-04-21 18:45
inaです。
以下の様にした方が良いと思いますが、如何でしょうか?

<html:link action="hoge" paramId="hoge_id" paramName="fruis" paramProperty="id">aa</html:link>
n.w
大ベテラン
会議室デビュー日: 2003/07/15
投稿数: 126
お住まい・勤務地: 神奈川
投稿日時: 2006-04-21 18:55
inaさんありがとうございます。
実は先ほどできたと思っていたスクリプトレットを埋め込む形の
場合ソース表示すると<%= fruits.getId(); %>と文字列として
表示されてしまい、<A href〜の形にしてしまっていたので
教えていただいた方法ですっきり書くことができました。

コード:
<html:link action="hoge" paramId="hoge_id" paramName="fruits" paramProperty="id">
    <bean:write name="fruits" property="name" />
</html:link> 


1

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