• ベストアンサー

struts2 iteratorタグ内でActionFormの値を参照したい

iteratorタグを使えば、iterator内で「○○.xxx」としなくても「xxx」で 値を参照できますよね。 リスト以外のActionFormの値を参照するにはどのように指定すればよいでしょうか。 初歩的なことですが、WEBで見つけることができなませんでした。よろしくお願いします。 <s:property value="%{title}" /> <s:iterator value="hogeList"> <s:property value="%{name}" /><BR /> <%-- ■ここにActionFormの値を表示したい!■ --%> </s:iterator>

  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • Lieserl
  • ベストアンサー率81% (31/38)
回答No.2

Struts2なので、ActionFormではなく、ActionにFieldDrivenされたプロパティの話ですよね? Actionは、既にValueStackに載っているので、そのまま参照できます。 iteratorで回している要素に同じ名前のプロパティがあった場合は <s:property value="[0].name" />hogeList[?].nameの値 <s:property value="[1].name" />Actionオブジェクトのnameの値 とする事で、Stackを辿る事ができます。 詳しくは参考URLを見てください。

参考URL:
http://cwiki.apache.org/WW/ognl-basics.html
hokuro777
質問者

補足

申し訳ございません。しばらく見ておらず、返信が遅れました。 ありがとうございます!解決しました! struts2を全く理解していないようで、ばりゅうすたっく??もでるどりぶん??? といった感じでした。 理解せず開発を進めると後々とんでもないことになりますね。 ValueStackについては、次のページでなんとなく理解できました。 http://codezine.jp/article/detail/4060

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

スコープから指定してあげればいいんじゃないかしら 

関連するQ&A

  • struts2のiteratorについて

    sturuts2の画面表示値の取得について教えてください。 Action側でmap<String,List>で保持している変数を 画面上に表示することはできたのですが、 textfieldやラジオボタン、チェックボタンなどで入力された値を Action側で取得したい場合、どのような形でコーディングすれば取得できます? 例)以下の例ではAction側で取得できませんでした。。。 <s:iterator value="hogeMap" status="map"> <s:iterator value="hogeList" status="list"> <s:textfield name=hogeMap[key].hogeList[%(#list.index)].hogehoge value=""> </s:iterator> </s:iterator>

  • Struts2のifタグについて

    いつもお世話になっております。 現在Struts2の学習を行っているのですが、 iteratorでlistの中のmapの値を取得しているのですが、 データを表示させるか判定に使用するifのタグの条件に propertyタグで取得した値を使用としたら、 正しく判定されませんでした。 どうしたらifタグのtest属性内でpropertyタグを使用できるでしょうか? <table> <s:iterator id="categoryList" value="categoryList" status="rowstatus" > <s:property value="CATEGORYNAME"/> <table border="3"> <s:iterator id="categoryTopicList" value="categoryTopicList" status="rowstatus" > <s:if test='<s:property value="TCID"/> == <s:property value="CATEGORYID"/>'> <tr> <td><s:property value="CATEGORYID" /></td> <td><s:property value="TCID" /></td> <td><s:property value="TOPICNAME" /></td> <td><s:property value="PROCEDURE"/></td> </tr> </s:if> </s:iterator> </table> </s:iterator> というようにjspは記述しています。 ifタグを使わずに表示させると値は取得されていたのでDBエラー等ではありませんでした。 使用しているstruts2のバージョンは2.0.14です。 ifタグにpropertyタグの値を条件として記述する方法を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Strutsでoptionタグの作り方

    例えばActionFormのメンバにBeanのリストがあるとして、 JSPではStrutsのhtmlタグを使ってselectボックスのoptionに ActionForm内のBeanリストをセットする方法を教えて下さい。 具体的に実現したいことは以下のような事です。 例> // アクションフォーム public sampleForm extends ActionForm {  private List<sampleBean> sampleBeanList; // getter、setterは省略 } // JSPでStrutsタグ(<html:select>とか<html:options>)を使って以下のようなセレクトボックスを作成したい! // 実現方法をご存知のかた、どうかご教示ください。 <select> <option value="sampleBeanのプロパティ">sampleBeanのプロパティ</option> <option value="sampleBeanのプロパティ">sampleBeanのプロパティ</option> <option value="sampleBeanのプロパティ">sampleBeanのプロパティ</option> <option value="sampleBeanのプロパティ">sampleBeanのプロパティ</option> </select> ちなみに環境は以下の通りです。 Java 1.6 Struts 1.3.8 Tomcat 6 以上、宜しくお願い致します。

  • Struts2のiteratorタグの使い方

    Struts2でiteratorタグを使用したいのですがJSPでの記述方法がわからず困っています。 アクションクラス、JSPでは以下のように記述しております。 検索するとActionクラス内でArrayListに独自のクラスが格納されている状態での記述方法 はサンプルとしてあったのですがArrayListにStringが格納されていた場合の記述方法に 関しての記載が見つかりませんでした。そのため現在、JSP側ではsession.getattribute()を 使用してしのいでいる次第です。 public ArrayList<String> getDatalist() { return this.datalist; } public void setDatalist(ArrayList<String> datalist) { this.datalist = datalist; } public String execute() { ArrayList<String> datalist = bdf.getDataList(); return "success";    } 以下、JSP側の記述 <s:iterator value="datalist"> ここの記述が不明 </s:iterator>

    • ベストアンサー
    • Java
  • 【struts】 ActionFormで別のActionFormの配列を定義時

    皆様お疲れ様です。 現在strutsのコーディングをしているのですが躓いている箇所がございましてお力をお借りしたいと思い、質問させていただきます。 ActionForm_Aの中にActionForm_Bの配列型を宣言しています。 //その他変数色々あってその下 private ActionForm_B[] af_b; getter/setterとしては public ActionForm_B[] getActionForm_B() { return af_b; } public void setActionForm_B(final ActionForm_B[] setAfb) { this.af_b = setAfb; } です。jspで表示するのは出来ますが、取得する際に 「javax.servlet.ServletException:BeanUtils.populate」 が表示されてActionForm_Bの配列型が取得出来ません。 indexedもやっていますし、IterateのindexIdも指定しています。 <logic:iterate id ="af_b" name="af_a" property="af_b" scope="request" indexId="index"> <html:hidden name="af_b" property="name1" indexed="true"/> <html:hidden name="af_b" property="name2" indexed="true"/> </logic:iterate> 表示されているhidden部のhtmlは <input type="hidden" name="af_b[0].name1" value="鬼瓦権座武朗"> となっています。 これを表示している画面からsubmitしますと javax.servlet.ServletException: BeanUtils.populate と表示され落ちてしまいます。 これらの情報からなにか気付いた事、ご指摘等がありましたら是非ご意見を頂きたいと思います。 よろしくお願いします。

    • ベストアンサー
    • Java
  • iteratorの再利用について

    コンテナの内容を変えた後に内容を変える前のiteratorを使用することはできないと聞きました。ので、連続して何らかのコンテナ内のデータを変更しつつ、探索する場合にも、iteratorは最初から探索を始めないといけないと思っています。 例えば以下のように #include <stdio.h> #include <list> struct data { int value; data(int value) {this->value = value;} }; typedef std::list<data> DataList; typedef std::list<data>::iterator DataIterator; bool EraseValue(DataList*dataList, int value) { DataIterator iterator= dataList->begin(); while(iterator != dataList->end()) { if(iterator->value == value) { dataList->erase(iterator); return true; } iterator++; } return false; } int main() { //データを入れる DataList dataList; for(int i=0;i<10; i++) dataList.push_back(data(i)); //指定のデータを探し、消す int Value[] = {4,5,7}; EraseValue(&dataList, Value[0]); EraseValue(&dataList, Value[1]); EraseValue(&dataList, Value[2]); //結果表示 DataIterator iterator = dataList.begin(); while(iterator != dataList.end()) { printf("%d\n",iterator->value); iterator++; } return 0; } ここで、新しい値の探索を始めるたびに、最初から探索をはじめる部分が無駄であると思っています。探索するデータは、上の例のように、必ず前回探したものの後にあることはわかっているとして、これより効率のよい方法はないでしょうか?自分の中での理想は、削除したiteratorの直前に使った(削除されていない)iteratorの位置から探索を始めるのがいい思っているのですが、これはどうやらできないこと(やってはいけないこと?)の様です。 コンテナをstd::listに限定した場合でも構いません。 ご教授よろしくお願いします。

  • Java struts プルダウン

    JAVAでプルダウンを作成しています。 しかしプルダウンの値を設定し、submitを掛けると全ての行のプルダウンの値が同じになってしまいます。 100円 200円 でsubmitを掛けると 200円 200円 になってしまう。 <logic:iterate id="element" name="ActionForm" property="GridList" indexId="idx"> <html:select name="ActionForm" property="selectData" style="margin-left:10px;"> <html:optionsCollection name="element" property="DropDownList" label="label" value="value" /> </html:select> </logic:iterate> selectDataはStringの配列です。 DropDownListにはlabelとvalueのプロパティを持ったBeanを格納しています。 selectDataには「100-150-1日」というハイフン区切りのデータが格納されます。 どこが問題かわかりませんでしょうか。

    • ベストアンサー
    • Java
  • Struts2のタグについて

    Struts2のタグにてJSP内にテキストボックスを以下のように記述しています。 この場合、JSPが最初に表示されたときはテキストボックス内には初期値として40 が表示されます。しかし、テキストボックスに 5 を入力しなおして サブミットし、再度JSPの画面が表示された時には40の値が表示されてしまいます。 value="40" の部分を消しておけばJSP画面再表示時には入力した 値が表示されますが初期表示としてvalueの部分は欲しいと思っています。 初期値の設定項目であるvalueの部分を残しながらもJSPの再表示時には 入力しなおした値が表示されるというような処理は以下のタグでは 無理なのでしょうか。何か良いお知恵がありましたらよろしくお願いいたします。 <s:textfield label="会員ID" name="id" value="40" />

    • ベストアンサー
    • Java
  • <s:iterator>の値をリストで取得したい

    Struts2です。 リストの取得の仕方で困っています。 特定の条件で検索をかけ、jspに表示された結果を一部textfieldで<s:iterator>のリスト表示し、その中身を変更して更新ボタンを押すと、DBのデータを更新する、という流れです。 jspは以下のようになっています。(一部抜粋) <table border="1"> <s:iterator status="st" value="projectList"> <tr> <td><s:checkbox id="isChecked" name="isChecked" /></td> <td><s:property value="projno"/></td> <td><s:textfield id="projname" name="projname" maxlength="24" size="52" /></td> <td><s:select id="deptno" name="deptno" list="departmentList" value="%{deptno}" listKey="deptno" listValue="deptno" /></td> <td><s:textfield id="respemp" name="respemp" maxlength="6" size="12" /></td> <td><s:textfield id="prstaff" name="prstaff" maxlength="6" size="12" /></td> <td><s:textfield id="prstdate" name="prstdate" maxlength="8" size="12" /></td> <td><s:textfield id="prendate" name="prendate" maxlength="8" size="12" /></td> <td><s:textfield id="majproj" name="majproj" maxlength="6" size="12" /></td> </tr> </s:iterator> </table> <s:property value="listSize"/>件 <s:form > <table> <tr> <td><s:textfield label="プロジェクトNo" id="projno" name="projno" size="8" maxlength="6" /></td> </tr> </table> <table> <tr> <s:submit action="search103R" value="一覧検索" onclick="return search_fnc()" /> <s:submit action="modify103R" value="一覧更新" onclick="return modify_fnc()" /> <s:submit action="jumpStruts2" method="jump103R3" value="登録画面" /> <s:property value="replyMsg" /> <s:hidden value="%{projno}" /> </tr> <s:actionerror /> </table> </s:form> javaのロジックは、以下のようになっています。引数に入れられた項目で更新する、という処理です。 // 更新処理 public void modify(String projno, String projname, String deptno, String respemp, String prstaff, String prstdate, String prendate, String majproj) throws SQLException, IOException { // SQLプロパティファイル読み込み sqlConf = DevLearningUtils.loadProperties("sql"); // SQL文     UPDATE PROJECT SET PROJNAME = ?, DEPTNO = ?, RESPEMP = ?, PRSTAFF = ?, PRSTDATE = ?, PRENDATE = ?, MAJPROJ = ? WHERE PROJNO = ? // 更新のSQL文を読み込む statement = conn.prepareStatement(sqlConf.getProperty("ProjectModify")); // 更新項目をSQL文にセット statement.setString(1, projname); statement.setString(2, deptno); statement.setString(3, respemp); // プロジェクト工数が空なら0を入れる if (prstaff.length() == 0) { statement.setString(4, "0"); } else { statement.setString(4, prstaff); } statement.setString(5, FormatUtils.addHyphenToDate(prstdate)); statement.setString(6, FormatUtils.addHyphenToDate(prendate)); statement.setString(7, majproj); statement.setString(8, projno); statement.executeUpdate(); } 色々と調べてみたのですが、iteratorの内容をリストとしてjavaで取得する、という方法がわかりませんでした。ご教示お願いします。

    • ベストアンサー
    • Java
  • Strutsでの質問

    Strutsでの質問 いつもお世話になっております。 <html:optionsCollection>使った際の実装のさせ方がわからない為、困っております。 birthday.jsp //省略 生年月日 <html:select property="year" > <html:optionsCollection name="UserCheckForm" property="year_map" value="key" label="value" /> </html:select>年 <html:select property="month" > <html:optionsCollection name="UserCheckForm" property="month_map" value="key" label="value" /> </html:select>月 <html:select property="days" > <html:optionsCollection name="UserCheckForm" property="days_map" value="key" label="value" /> </html:select>日<br/><br/> ActionForm、Actionではどのように定義しておけばいいのでしょうか? ActionFormでは //省略 LinkedHashMap<String, String> year_map = new LinkedHashMap<String, String>(); year_map.put("01", "1970"); year_map.put("02", "1971"); year_map.put("03", "1972"); year_map.put("04", "1973"); year_map.put("05", "1974"); year_map.put("06", "1975"); year_map.put("07", "1976"); year_map.put("08", "1977"); LinkedHashMap<String, String> month_map = new LinkedHashMap<String, String>(); month_map.put("01", "01"); month_map.put("02", "02"); month_map.put("03", "03"); LinkedHashMap<String, String> days_map = new LinkedHashMap<String, String>(); days_map.put("01", "01"); days_map.put("02", "02"); days_map.put("03", "03"); でもこれっておかしいですよね・・・。 ActionFormにはsetterとgetterを実装しなければいけないのに。 setterはこんな感じになるんでしょうか。 public void setYear_map(){ year_map.put("key","value"); } でもこれだと動的にキー名と値が入らず、1個分しか出来ないですよね…。 どうしたらいいかわからないのでどなたか教えて頂ければ幸いです。 また結構なサイトみてますが、イマイチわかりません。 参考URLをご提示の場合はどのへんを参考にすればいいか 教えて頂ければと思います。 申し訳ありませんが、宜しくお願い致します。

    • ベストアンサー
    • Java

専門家に質問してみよう