- PR -

Strutsタグとスクリプトレットの併用方法について

1
投稿者投稿内容
FZR
常連さん
会議室デビュー日: 2007/09/10
投稿数: 42
投稿日時: 2008-10-27 13:35
いつもお伺いするばかりで申し訳ないです。

Strutsタグとスクリプトレットの併用方法がイマイチよく判らずに困っています。
元々ServletやJSPを十分に使用せずにStrutsからWebプログラムを作り出したこともあり
それぞれを混在したときに、どのように書けばよいのか具体的なコードが浮かびません。

もちろん極力スクリプトレットは排除したいのですが、今回は評価対象が複数になるた
めタグで書き出すと相当量になってしまい、部分的にスクリプトレットを埋め込み簡略
化したいと考えています。

実例を挙げますと、数〜10個程度のbooleanのメンバー変数にアクセスするgetterを
持つBean hogeがあり、それを格納するArrayList<hoge>の内容を<logic:iterate>で表
示しているのですが、いくつかのgetterを比較評価することで、表示するボタンを切り
替えたいのです。

できればAction側でボタン制御用のproperty/getterを作成・設定せずにJSPで切り抜け
たいと考えています。

javaコードで
Bean bean = new Bean();
if(bean.getAaa == true || bean.getBbb == true || bean.getCcc == true){
System.out.println("Yes");
}else{
System.out.println("No");
}

のようなコードを<logic:iterate>内部で実現したいのですが、
<logic:iterate id="list" name="BEAN_LIST">のlistに対しスクリプトレットでアク
セスしようとした場合、どのように記述したらよいのでしょうか?
また上記if()文のようなロジックが多数に及ぶ場合、Strutsタグだけで実現するのは
無理があると思われますでしょうか?


[ メッセージ編集済み 編集者: FZR 編集日時 2008-10-27 13:37 ]
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2008-10-27 14:23
1つ目の質問に対して
<logic:iterate>でnameに指定したコレクションの要素は
idに指定した名前でpageContextに格納されています。
気が向いたらStrutsのソースを見てみるといいかも。



2つめの質問に対して

次のように書くことができます。(簡略)

<logic:iterate>
<logic:equal>
〜〜〜
</logic:equal>
</logic:iterate>
FZR
常連さん
会議室デビュー日: 2007/09/10
投稿数: 42
投稿日時: 2008-10-27 16:07
# あすか様

早速のコメントありがとうございます。
Bean bean = (Bean)pageContext.getAttribute("list");
と書かないとダメなんですね。了解しました。

2つ目の件なんですが、どうやら書き方が悪かったようで、意図をお伝えできて
いないみたいです。当方としては...

if(bean.getAaa == true || bean.getBbb == true || bean.getCcc == true)

の1文をタグで記述すると

<logic:equal name="list" property="aaa" value="true">
<logic:equal name="list" property="bbb" value="true">
<logic:equal name="list" property="ccc" value="true">
と全てのプロパティがtrueとして評価された場合の他に、プロパティをfalseとし
て評価した場合の<logic:notEqual>タグも併せて全パターンを記述する必要がある
ため非現実的なのか?と言うことをお伺いしたかったのです。

今回の例では3つのプロパティでしたが、これが10近くにもなるとlogicタグの
嵐になってしまうので、皆さんならどのような方法を取っているのか...と気に
なった次第です。

文字列にしてパターンマッチングすれば良いようなものなんですが...
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2008-10-27 18:04
そういう場合は
専用のチェックメソッドを用意して
例えば
bean.getAaa == true || bean.getBbb == true || bean.getCcc == true
となるようなメソッド
bean.isABC()を作って
<logic:equal name="list" property="abc" value="true">
のようにするとJSPが綺麗になります。

またlogicタグではなくJSTLのcoreのタグを使って
<c:if test="${bean.aaa == true || bean.bbb == true || bean.ccc == true}">〜</c:if>
FZR
常連さん
会議室デビュー日: 2007/09/10
投稿数: 42
投稿日時: 2008-10-28 08:58
# あすか様

やはり専用のメソッドを作るのが一番シンプルそうですね。
どうもありがとうございました。
1

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