- ベストアンサー
html:optionsについて
html:optionsを使用して、コンボボックスを作成しようと思っていますが、 初期状態である値を選択したいと思っているのですが、どうやったらいいか分かりません。 色々調べてみても、答えらしきものが見つかりませんでした。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>request.setAttribute("optionsYear",[表示させたい値以外のそのほかの値の配列変数]); 表示させたい値を配列に含めないといけないのではないですか? そうしないとoptionとして出力されませんよね。 struts1.3.10をダウンロードして動かしてみたところ、初期選択することができました。 ブランクプロジェクトをちょこっと変更しただけなのでbrave9977さんの画面遷移とは違うと思いますが、 <html:select>と<html:options>の動きに影響はないはずなので。 ちょっと長くなりますが下記にソースを記載します。 --A.java-- public class A extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { B b = (B)form; b.yearValue = "2010"; request.setAttribute("optionsYear", new String[]{"2008","2009","2010","2011"}); return mapping.findForward("hoge"); } } --B.java-- public class B extends ActionForm { public String yearValue; public String getYearValue() { return yearValue; } public void setYearValue(String yearValue) { this.yearValue = yearValue; } } --Welcome.jsp-- <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <html:html> <head> <html:base/> </head> <body bgcolor="white"> <html:select name="BeanName" property="yearValue" > <html:options name="optionsYear" labelName="optionsYear"/> </html:select> </body> </html:html> --struts-config.xml-- <form-beans> <form-bean name="BeanName" type="test.B" /> </form-beans> <action-mappings> <action path="/Welcome" type="test.A" name="BeanName"> <forward name="hoge" path="/pages/Welcome.jsp"></forward> </action> </action-mappings> --表示時のHTMLソース-- <html> <head> <base href="http://localhost:8083/struts-blank-1.3.10/pages/Welcome.jsp"> </head> <body bgcolor="white"> <select name="yearValue"><option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option></select> </body> </html> A.javaの b.yearValue = "2010"; を b.yearValue = "2009"; とした場合には、ちゃんと2009が選択された状態で表示されました。
その他の回答 (2)
- yamada_g
- ベストアンサー率68% (258/374)
<html:options>に該当するvalueを持った選択肢が存在しないのではないですか? HTMLのソースで確認してみてください。 strutsを動かせる環境が手元にないので確認できないのですが、 この記述だと各optionのvalueが空になってたりしませんか。 また、質問の際にはJDKやOSなどの環境を具体的に書いた方がいいですよ。 strutsもバージョンによって記述内容が違いますから。
お礼
ありがとうございます。 環境は JDK:Version 6 Update 22 OS:WindowsXP Struts:1.3.10 です。 実行結果なのですが、 <select name="yearValue"> <option value="2005">2005</option> <option value="2006">2006</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> となっています。 この時は「2010」を選択しているので、 optionsにはあるはずです。 下記のPGに間違いは、なかったのでしょうか?
- yamada_g
- ベストアンサー率68% (258/374)
初期選択する値を、 <html:select>タグのvalue属性か、 ActionFormBeanの該当プロパティに設定すればいいのではないでしょうか。
お礼
回答ありがとうございます。 >ActionFormBeanの該当プロパティに設定すれば・・・ を、試してみたのですが、表示されませんでした。 一部抜粋してみたので、何か間違っているところがあれば、 ご指摘ください。 よろしくお願いいたします。 【A.java】※Actionクラス public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception{ B beanForm = (B)form; beanForm.yearValue = "表示させたい値"; request.setAttribute("optionsYear",[表示させたい値以外のそのほかの値の配列変数]); return mapping.findForward("succsess"); } 【B.java】※beanクラス public class B extends ActionForm{ public String yearValue; /** * @return yearValue */ public String getYearValue() { return yearValue; } /** * @param yearValue セットする yearValue */ public void setYearValue(String yearValue) { this.yearValue = yearValue; } } 【A.jsp】 <html:select property="yearValue" > <html:options name="optionsYear" labelName="optionsYear"/> </html:select> 【struts-config.xml】 <form-beans> <form-bean name="BeanName" type="jp.co.XXXX.XXXX.XXXXX.B" /> <form-beans/> <action attribute="BeanName" input="/pages/Z.jsp" name="BeanName" path="/action" type="jp.co.XXXX.XXXX.XXXXX.A" scope="request" validate="false"> <forward name="succsess" path="/XXXXXX/XXXXXX/A.jsp" /> </action>
お礼
お礼できずにすみませんでした。 どうやら、根本的な勘違いをしていたみたいです。 ありがとうございました。