0

ストラットに少し似た MVC フレームワークを使用しています。したがって、アプリケーションに「ストアの編集」リンクがあるとします。これは、URL がどのように見えるかです。

http://localhost:9080/test?action=editStore&storeNum=10

ここで、アクションは、実行するアクション (Struts アクションに類似) を決定します。ここでの対応するアクションは、EditStoreAction です。これをクリックすると、ストアのさまざまな属性を編集するためのポップアップが開きます。

ここでの私の質問は次のとおりです。自分のアクションをどのように記述すればよいですか? このコンテキストで 2 つのアクションを記述しますか?

  1. edit.jsp をレンダリングする EditStoreAction
  2. edit.jsp のレンダリングされた応答でユーザーが同意を押したときに呼び出される StoreSaveAction。

または、アクションを 1 つだけ記述しますか? EditStoreAction とフォームを同じアクションに送信すると、ユーザーが送信時に変更の承認ボタンを押したことがわかります。したがって、アクションで別のフローを実行すると、更新がデータベースに保存され、差分ページにリダイレクトされます。

ここでのベストプラクティスは何ですか? コードをモジュール化しているので、できるだけ多くのアクションを作成しますか? または、jsp ですべてを処理する 1 つのアクションを記述するだけですか?

この質問は些細なことに聞こえるかもしれませんが、すべてを正しく処理したい場合があります。したがって、質問です。あなたの助けに感謝。

4

2 に答える 2

2

アイデアは、Spring MVC と同様に、アクションを特定のクラス (コントローラーなど) のメソッドにマップすることです。

したがって、あなたの場合、これら 2 つのアクションは同じクラスの 2 つの異なるメソッドにマップされます。クラスStoreFormControllerと 2 つのメソッドeditStore()を呼び出すことができますsaveStore()

エンティティごとに 2 つのコントローラーを作成するとなお良いでしょう。1 つはすべての GET 要求用で、もう 1 つは POST 要求用です。したがって、あなたの場合、StoreController他のすべてのリクエストとStoreFormControllerすべてのフォーム送信、つまり投稿リクエストに対して2つのコントローラーがあります。これで、GET である最初のアクションはeditStore()のメソッドにStoreController送られ、2 番目の POST リクエストは のsaveStore()メソッドに送られStoreFormControllerます。リクエスト タイプに基づいて、これら 2 つのクラスのいずれかで必要な数のメソッドを定義できます。

Spring MVC API を知っていれば、私がどこから来たのかを簡単に確認できます。

于 2009-06-18T04:51:10.603 に答える
1

アクション クラス (「execute」) メソッドで複数のメソッドを定義できるため、struts DispatchAction クラスを使用するのが好きです。内部では、実行する必要があるメソッド (フォームで送信されるか、URL で渡される) を見つけ、リフレクションを使用してメソッドを見つけ、適切な引数セットで呼び出すだけです (メソッドには同じメソッドが必要です)。 「execute」メソッドの署名)、結果を取得して渡します。DispatchAction は、Action クラスの「execute」メソッドを単純にオーバーライドして、その動作を実装します。

そうは言っても、あなたの場合、「DispatchStoreAction」としましょう。おそらく「準備」と「保存」の2つのメソッドを定義します。私はまだ良いクラスの抽象化を持っているので(そして、クラス名に実行している「アクション」を入れないでください)、メソッドが何をすべきかを明確に識別できるので、そのようにするのが好きです。定義上、アクション クラスは小さい傾向があるためです。おそらくどこかに「StoreLogic」または「StoreBusiness」が定義されており、このクラスは、作業中のエンティティに関連するビジネス ロジックを処理します。個人的には、「StoreAction」と「StoreLogic」、「UserAction」と「UserLogic」がそれぞれ1つずつあればいいと思います。

これを行う方法については、DispatchAction クラスのソース コードを確認してください。ただし、実装は簡単です。

于 2009-06-18T04:19:00.490 に答える