strutsを使ってJSPの値をアクションで取得する方法を徹底解説してみました。

Struts2によるWebアプリケーション構築手順を徹底解説(第1回)ではstruts2のライブラリを使ってJSPに入力した値をActionで受け取り、サービスクラスで加工して次の画面に遷移するアプリを作成しました。

第1回では、JSPのテキストボックスに入力された値をアクションクラスに受け渡してましたが、第2回ではラジオボックス、チェックボックス、プルダウンなど様々な入力フォームを作成してみましょう。

struts2のデータの流れはどうなってる?

入力フォームで入力したデータは次のような流れになっています。

JSPで入力されたデータはformタグで指定したActionクラスのメソッドを呼び出します。

ここでActionクラスで宣言したエンティティの項目名とフォームのname属性で指定した項目名がマッピングされてJSP入力したデータを受け取ることができます。

これは余談になりますが、Actionクラスでそのまま入力されたデータを加工して返してもいいのですが、基本的にWebアプリケーションでデータを加工する場合は、サービスクラスを作成します。

サービスクラスではデータをDBに保存したり、入力した値のバリデーションチェックなどの処理を盛り込んであげましょう。

本題に戻り、サービスクラスは加工したデータをActionクラスに返却します。そして返却されたデータを次の画面で描画しています。

また、JSPではアクションクラスで定義したエンティティの項目を使用して画面を作成することができます。

JSPのテキストボックスで入力したデータをアクションクラスに送信

テキストボックスに入力した値を渡す時のJSPは次のように記述します。

◆JSP

<s:form action="transmit">

    ログインID<input type="text" name="myFormEntity.loginid">

    パスワード<input type="text" name="myFormEntity.password">

<s:submit value="送信" />

</s:form>

<input>タグの中には、アクションに渡すエンティティの項目名を指定することで値を受け渡すことができます。

注意

アクションの中のエンティティのインスタンス名とname属性の名前を合わせる必要があるため、大文字と小文字も間違えないようにしましょう。

JSPのラジオボタンで入力したデータをアクションクラスに送信

ラジオボタンに入力した値を渡す時のJSPは次のように記述します。

<s:form action="transmit">

性別:男<input type="radio" name="myFormEntity.sex" value="male"><input type="radio" name="myFormEntity.sex" value="female"><br>

名前:momo<input type="radio" name="myFormEntity.name" value="M">Engineer<input type="radio" name="myFormEntity.name" value="E">

<s:submit value="送信" />

補足
性別と名前のカテゴリーで選択できるラジオボタンはname属性で分けることができるみたいです。

JSPのチェックボックスで入力したデータをアクションクラスに渡す

チェックボックスに入力した値を渡す時のJSPは次のように記述します。

性別:男<input type="checkbox" name="myFormEntity.sex" value="male"><input type="checkbox" name="myFormEntity.sex" value="female"><br>

名前:momo<input type="checkbox" name="myFormEntity.name" value="M">Engineer<input type="checkbox" name="myFormEntity.name" value="E">

また、チェックボックスについては複数入力が可能なため、両方チェックされたときの出力は次のようになります。

このように入力すると・・・・

こんな感じに表示されます。チェックボックスに複数のチェックがされた場合は、配列で値が渡されるためカンマ区切りで表示されました。

JSPでプルダウンで入力したデータをアクションクラスに渡す

プルダウンで入力した値を渡す時のJSPは次のように記述します。

<s:form action="transmit">

<select name = "myFormEntity.sex">

<option value = "M"></option>

<option value = "F"></option>

</select>

<s:submit value="送信" />

アクションクラスでデータの送信に失敗する場合

データの受け渡しが成功しない場合は、次のような対応をしてみましょう。

⑴サーバの再起動

⑵アクションのエンティティ名とJSPのname属性を比較する

まずはサーバを再起動してみましょう。修正したプログラムが正しくサーバに反映されていない可能性があります。

サーバを再起動することでWebアプリケーションのjarファイルやearファイルを読み込むため、ソースが間違っていないと思ったらまずはサーバを再起動してみましょう。

 

サーバの再起動をしても直らない場合は JSPのname属性とアクションのおエンティティ名を比較してみましょう。

エンティティ名とJSPのname属性は大文字・小文字を区別して値をエンティティに設定しています。大抵の場合、項目名の不一致で値の受け渡しが失敗していることが多いです。

まとめ

JSPの値をアクションに受け渡す方法を理解できましたでしょうか。

最初はなぜ項目名を合わせないといけないのか?アクションにエンティティを定義しないといけないのはなぜかと不思議に思うことがあるかもしれません。

しかし、フレームワークというものは一定の基準のルールに従いソースを書くものです。

深く理解しようと思うととても骨が折れる作業となり、現場のエンジニアも理解できていない人が多いです。

初心者の方はまずは、JSPの値をアクションに渡して加工して画面に返却する処理を一人で記述できるようになるところまでまずは頑張ってみましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

某私立有名大学に在学中、有名ポータルサイト企業のハッカソン出場経験複するが、周囲とのプログラミングや技術力の差を実感する。 大学卒業時の就職活動で技術力をアピールするためプログラミングの学習をひたすら行い、現在某有名企業でWebアプリケーションエンジニアとして活躍中。これからは自分が経験した学習方法を発信してプログラミングが分かる楽しさを伝えていきたいと思っています!