select タグに関連付ける Bean の名前を指定してないだけだった(^^;;;

Struts1 の保守案件で JSP をぽちぽち触っている時に、

HTTPステータス 500 - javax.servlet.ServletException: javax.servlet.jsp.JspException:
Cannot find bean under name sex_list

というエラーが出たのでしばし悩む。

「sex_list」という名前の「bean」を見つけられない?
「bean」の中に「sex_list」を見つけられない?
英語苦手なのと Java/Struts 初心者なのでどう訳すのが正解なのかわからないが、sex_list プロパティが見つからないと言っているのは確かなようだ・・・

説明には、

The server encountered an internal error that prevented it from fulfilling this request.

とあるが、リクエストが内部エラーを起こしたぜってだけの説明で、結局「Cannot find bean under name sex_list」が全てだな・・・(^^;

ちなみに JSP の記述は

<html:select property="sex">
  <html:option collection="sex_list" property="label" labelProperty="value"/>
</html:select>

で、hogeForm というアクション・フォーム Bean の記述は、

private Vector<LabelValueBean> sex_list = new Vector<LabelValueBean>();

public Vector<LabelValueBean> getSex_list() {
  return sex_list;
}

public void setSex_list(Vector<LabelValueBean> sex_list) {
  this.sex_list = sex_list;
}

こんな感じで問題なさそう。

あ・・・hogeForm っていうアクション・フォーム Bean の名前を指定してないからか。

このシステムでは、baseForm クラスが extends ActionForm という具合に ActionForm クラスを継承しており、hogeForm クラスはこの baseForm クラスをスーパークラスにしている。
なので、name 属性で hogeForm を指定していないから、大元の baseForm クラスに getSex_list メソッドを参照にいっちゃうのか???で、sex_list プロパティは実際には hogeForm にしか存在していないからエラーになると。

<html:form>タグか、<html:select>タグに name 属性で hogeForm を指定すれば良いようだが、他のソースを漁ってみると、<bean:define>タグで指定していたので、同じように、

<bean:define id="sex_list" name="hogeForm" property="sex_list" scope="request"/>

という記述を追加してバッチリOK。

恥ずかしいミスだが、ググってみると同じような間違いをして質問している人もいたので、そういう初心者たちの何かの助けになればと思い、ブログに書いときます。

トラックバック(0)

このブログ記事を参照しているブログ一覧: select タグに関連付ける Bean の名前を指定してないだけだった(^^;;;

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/4148

コメントする

このブログ記事について

このページは、shinodaが2016年10月28日 10:39に書いたブログ記事です。

ひとつ前のブログ記事は「【廣島立ち呑みん祭】立ち呑み ほしの」です。

次のブログ記事は「吉野家で380円値引きのサービス券で朝から牛丼を食らう」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら