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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
異なるActionクラスで同一のActionFormを使いまわす場合は、例示されたように、入力画面と確認画面とで完全に同じパラメータの組み合わせ、入力チェック、自動型変換が同じ場合ならば良いでしょう。
ただし同じ処理ではないのに複数Actionクラス間でActionFormを共有すると、本来入ってこないパラメータを許可する可能性や入力チェックの回避を実装しなければならないケースが発生します。
簡単なマスターメンテナンス画面でも、新規登録と更新、削除間で同じActionFormを使ってはならないケース、つまり入ってくるパラメータの組み合わせが違うことは十分ありえますので、画面の入出力項目を鑑みて慎重に定義しなければなりません。
投稿2016/11/21 06:47
総合スコア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総合スコア4791
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/18 11:08
退会済みユーザー
2016/11/18 11:15
2016/11/18 11:29
2016/11/21 05:25
退会済みユーザー
2016/11/21 13:07
0
基本的に「登録画面」「更新画面」「確認画面」「削除確認画面」は同じ form を使います。
またアクションも「更新画面」「確認画面」「削除確認画面」の初期処理は同じアクションクラスを利用します。
※ 利用JSP等が違うだけ
投稿2016/11/18 09:09
退会済みユーザー
総合スコア0
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。