質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

2345閲覧

Java struts1 ActionFormの使用用途

ajijek

総合スコア16

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/11/18 06:03

java struts1で確認したいことがあります。

ActionFormの使用用途としては画面のパラメータを格納すること
に使うと思うのですが、入力画面と確認画面がほぼ
同じ項目であった場合は、同じActionFormを使いまわすものなの
でしょうか?

(例)
InputActionとInputActionForm
ConfirmActionとConfirmActionFormがあった時に、
入力項目としてユーザー名が同じような時、そのほか
項目あった時にほぼ同じような時。
アクションごとにActionFormを定義するのが常というもの
なのでしょうか?

コード private String userNm; public String getUserNm() { return userNm; } public void setUserNm(String userNm) { this.id = userNm; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

異なるActionクラスで同一のActionFormを使いまわす場合は、例示されたように、入力画面と確認画面とで完全に同じパラメータの組み合わせ、入力チェック、自動型変換が同じ場合ならば良いでしょう。

ただし同じ処理ではないのに複数Actionクラス間でActionFormを共有すると、本来入ってこないパラメータを許可する可能性や入力チェックの回避を実装しなければならないケースが発生します。
簡単なマスターメンテナンス画面でも、新規登録と更新、削除間で同じActionFormを使ってはならないケース、つまり入ってくるパラメータの組み合わせが違うことは十分ありえますので、画面の入出力項目を鑑みて慎重に定義しなければなりません。

投稿2016/11/21 06:47

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

入力画面と確認画面がほぼ 同じ項目であった場合

というよりは、意味的に同じデータ構造を扱う場合は同じフォームを「使い回す」のが一般的かと思います。
そうすれば、バリデーション処理などを共通化できるからです。

例えばユーザーの情報を登録するフローがあったとして、
以下のように 入力・確認・登録 アクションそれぞれで同じフォームクラスを指定しておく(※)と、
name="UserdataForm" 部分が共通

struts-config.xml

xml

1<!-- 入力アクション --> 2<action path="/user-data-input" 3 type="com.example.UserdataInputAction" 4 name="UserdataForm" 5 scope="request" 6 validate="false"> 7 <forward name="success" path="user-data-confirm" /> 8</action> 9 10<!-- 確認アクション --> 11<action path="/user-data-confirm" 12 type="com.example.UserdataConfirmAction" 13 name="UserdataForm" 14 scope="request" 15 validate="true" 16 input="/user-data-input"> 17 <forward name="success" path="user-data-register" /> 18</action> 19 20<!-- 登録アクション --> 21<action path="/user-data-register" 22 type="com.example.UserdataRegisterAction" 23 name="UserdataForm" 24 scope="request" 25 validate="true" 26 input="/user-data-input"> 27 <forward name="success" path="complete" redirect="true" /> 28</action>

バリデーションの定義は以下の1つだけで済みます。
validation.xml

xml

1<form name="UserdataForm"> 2 <field property="userName" depends="required"> 3 <arg0 name="required" key="property.userName" /> 4 </field> 5 6 <field property="email" depends="required,email"> 7 <arg0 name="required" key="property.email" /> 8 <arg0 name="email" key="property.email" /> 9 </field> 10 11 ... 12</form>

逆に、入力・確認・登録処理 それぞれで別のフォームクラスを指定してしまうと、
(おそらく)全く同じ内容のバリデーションをフォームクラスの数だけ、定義しなければならなくなります。

投稿2016/11/18 10:47

編集2016/11/18 10:49
KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/11/18 11:02

LookupDispatchAction のサブクラスでまとめればいいじゃない
KiyoshiMotoki

2016/11/18 11:08

xa051様 コメントありがとうございます。 私の回答の、どの部分に対するご指摘でしょうか?
退会済みユーザー

退会済みユーザー

2016/11/18 11:15

index confirme update 等一つのアクションクラスで実装できますよ。 userAction#index #cinfume #update 等 また入力エラーの場合URLが変わらない
KiyoshiMotoki

2016/11/18 11:29

xa051様 返信ありがとうございます。 ようやく理解しました。 仰る通り、LookupDispatchAction を使用すればアクションクラスも共通化できますね。 質問(※)に対して何か見当違いな回答をしてしまったのかと思い、混乱してしまいました(笑 ※ 入力画面と確認画面がほぼ 同じ項目であった場合は、  同じActionFormを使いまわすものなの でしょうか?
ajijek

2016/11/21 05:25

お世話になります。 kiyoshiMotoki様、 xa051様  返信ありがとうございます。 具体的なコードまで記載いただきまして、ありがとうございます。 非常にわかりやすく理解度が高まりました。 バリデーションなど共通化できるのですね。定義する手間を省く意味でも 共通化するということはしておいたほうがよいと改めて考えさせられました。 また、LookupDispatchActionですが、私からの情報が漏れてしまい申し訳ございません。 現在使用しているのは、struts1.0でして、以前調べものをしていた時に、struts1.2からのクラスだったと記憶しております。記憶に誤りがなければ、今回は使用できないのかな?と思います。 LookupDispatchActionを使わずに複数画面への遷移など処理を行うとして、 送信されたパラメータの 値ではなく、名前の有無で判断すれば、 普通のActionクラスでも振り分けするみたいな面倒なことをしています。
guest

0

基本的に「登録画面」「更新画面」「確認画面」「削除確認画面」は同じ form を使います。
またアクションも「更新画面」「確認画面」「削除確認画面」の初期処理は同じアクションクラスを利用します。
※ 利用JSP等が違うだけ

投稿2016/11/18 09:09

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/11/18 09:12

またマスター管理(SELECT BOX用)に至っては複数の「登録画面」「更新画面」でも同じFORMを利用します。
ajijek

2016/11/21 05:25

ありがとうございます。 同じFormということで承知いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問