• ベストアンサー

iterateで受け取った値を処理に使いたい

こんにちは、honiyonです。  まだ知識が浅い為、おかしな言い回しがあるかも知れませんがご容赦くださいm(_ _)m  Servlet側で作成したデータをJSP側で <logic:iterate id="LOOP" name="LOOP_LIST" indexId="index"> <bean:write name="LOOP" property="data1"/> <bean:write name="LOOP" property="data2"/> </logic:iterate>  のようにして表示する方法はわかりました。  今度は、これを表示するのではなくて処理に使いたいのですが、その方法がわからず難儀しています。  こんな書き方は出来ないのですが、こういう事がやりたいと思っています。 <logic:iterate id="LOOP" name="LOOP_LIST" indexId="index"> <!---こっちは普通に表示---> <bean:write name="LOOP" property="data1"/> <!---data2は処理に使う---> <%  ↓↓ここの書き方がわからない↓↓ String CODE= "<bean:write name="LOOP" property="data2"/>" if (CODE == "1") { out.println("牛"); } else { out.println("馬"); } %> </logic:iterate>  よろしくお願いします(..

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

No.1の方のtypoを補いつつ、 <logic:equal name="LOOP" property="data2" value="1"> 牛 </logic:equal> <logic:notEqual name="LOOP" property="data2" value="1"> 馬 </logic:notEqual> ですね。これですむなら、この方法を採用すべきです。 「本当は牛馬ではなく、実はもっと複雑で」というのであれば、form-beanのpropertyを通じて表示データを取得できるように、あらかじめ仕込んでおく手法もあります。 「どうしてもスクリプトレットで」となると、logic:iterate の処理とは全く無関係に、自身でform-beanからデータを引っ張ってくることになるかと思います。背景を適当に想像で補って全体を記せば、例えば以下のようなコードです。 どこか倒錯した感がありますね。だから、この方法は使うべきではありません。 <%@ page import="myproject.ListForm" %> <%@ page import="myproject.ItemForm" %> <html:form action="/myproject/listAction"> <bean:define id="LOOP_LIST" name="listForm" property="list"/> <logic:iterate id="LOOP" name="LOOP_LIST" indexId="index"> <bean:write name="LOOP" property="data1"/> <%! int index = 0; %> <% ListForm list = (ListForm) request.getAttribute("listForm"); ItemForm item = (ItemForm) list.getList().get(index++); String code = item.getData2(); out.println(code.eqauls("1") ? "牛": "馬"); %> <hr/> </logic:iterate> ※ String の同値Checkには、equals() を使います。

honiyon
質問者

お礼

こんにちは、honiyonです。   お礼が大変遅くなり申し訳ありません。     なるほど、確かに倒錯感がありますね...。   しかしどうしてもやりたいとなると、こうなってしまうのですね。   今回は処理をServlet側に組み込んでしまうことにしました。   タグの生成をServlet側で行う、というのも私なりに気に入らない手法ではあったのですが。   詳しいご説明、有難うございましたm(_ _)m

その他の回答 (1)

回答No.1

logicタグを使ってはいかがでしょうか? <logic:equal name="LOOP" property="data2" value="1">  <bean:write name="LOOP" property="data2"/> </logic:equal> ほかにもlogicタグには便利なものがあるので調べてみては。 あとJSTLを用いる手もあるので検索してみて下さい。

honiyon
質問者

お礼

こんにちは、honiyonです。   素早くご回答頂いていたにもかかわらず、   お礼が遅くなり申し訳ありません。      なるほど、beanタグのマニュアルを読んだ時にこの辺りサッパリだったのですが、おかげで謎が解けました。   このように使うことが出来るのですね。   タグだけで判断処理が出来るとは便利です。   改めてマニュアルを読み返しましたが、私のしたい事には不足するようです。   これだけで実現出来ればスッキリするだけに残念です。   大変参考になりました。   有難うございました。

関連するQ&A

専門家に質問してみよう