1

私は現在、望ましい結果を生み出すためにウィザード/ワークフローを統合する Struts2 アプリケーションに取り組んでいます。より明確にするために、3 つの異なるページで (主に AJAX 呼び出しで) 変更されるビジネス オブジェクトがあります。現時点では、ModelDriven アクション (同じビジネス オブジェクトで動作するすべてのアクションによって拡張されます) を Scope インターセプターと組み合わせて使用​​しています。これは、ユーザーが一度に 1 つのビジネス オブジェクトのデータのみを処理している場合は問題なく機能しますが、ユーザーが複数のタブで異なるオブジェクトのウィザードを開くと (そして、物事をより速く完了したい場合にこれを行います)、すべてが面倒になります。主に、セッションに保存されているビジネス オブジェクトが 1 つしかないという事実が原因です。

Conversation Scope Interceptor の使用に関する記事 (メイン記事) と Scope プラグインの使用に関する記事 (こちら)をいくつか読みました。ただし、どちらのアプローチにも問題があるようです。

  • Conversation Scope Interceptor は、会話を自動的に期限切れにすることも、Struts2 と適切に統合することもありません。
  • Scope プラグインには適切なドキュメントがなく、最後のビルドは 2007 年に作成されました (実際には、Mark Menard が Conversation Scope Interceptor を定義するときに書いたアイデアの一部が含まれていますが、同じコードは使用されていません)。

Spring の WebFlow プラグインは、現時点で使用するには少し複雑すぎるようです。現在、数時間で実装できるものを探していますが、必要に応じて機能するものを提案していただければ構いませんが、現在これに費やしたいよりも多くの時間が必要な場合でもかまいません。 .

ベテランの Struts2 開発者の皆さん、何を提案しますか? これをどのように実装すればよいですか?

4

2 に答える 2

1

わかりました、これは完全に焼き上げられたアイデアではありません。しかし、他に何も提供していないので、ここから始めます。

1) フロー全体を 1 ページに移動できるかどうかを確認します。私は、ページ数が少ないほど良いアプローチであると強く信じています。アプリケーションの複雑さがまったく軽減されるわけではありませんが、ユーザーは通常、インターフェイスがより直感的であると感じます。これを行う最も簡単な方法の 1 つは、json プラグインと、json サービスへの多数の ajax 呼び出しを使用することです。

2) ページ間を遷移する必要がある場合 (または #1 を実装するにはクライアント側の作業が多すぎると思われる場合) は、s:token タグを検討します。フローを開始する最初のページでこのタグが使用され、呼び出しごとに一意の値が作成されます。モデル オブジェクトのセッションにマップを保存します。アクションは、セッションからルックアップすることによって、モデルを提供する必要があります。

#2にはいくつかの課題があります。セッションがあまりにも多くのドメイン オブジェクトを取得しないようにするにはどうすればよいでしょうか? a) それは問題ではないかもしれません。セッションが 6 時間に設定されている場合、一晩で問題が解消されることを確信できます。b) セッション内のオブジェクトを取得/設定/一覧表示できる自己管理インターフェースを提供しました。それはあなたが最初に考えたものかもしれませんが、労働者が一定の量を実行し、その後停止して別の作業を行うことができます. 作業単位に意味のある名前 (請求書番号など) があれば、非常に便利です。

もう少し洗練された方法は、モデル オブジェクトをセッションからサービス レイヤーに移動することです。挿入された時点で、挿入時間を設定します。おそらく、各タイプのモデル オブジェクトを保持するマネージャーが必要であり、各マネージャーには、ドメイン オブジェクトのマップを定期的にスキャンして期限切れのものを一掃するデーモン スレッドが必要です。

トークンでフローを開始し、各ページで別のトークンを使用することで、より複雑なシステムを理解できます。それぞれ "flowId" と "currentPageId" を指定すると、許容される遷移をグラフ化できます。

この時点で、Spring Web フローはかなり良くなり始めていることに注意してください。

于 2011-09-07T21:21:41.210 に答える
0

現在、Struts2 用の会話プラグインがあり、開発者が必要とする作業はほとんどなく、これらすべての目標を達成できます: http://code.google.com/p/struts2-conversation/

- ネストされた会話 - 死んだ会話のクリーンアップ - アノテーションと命名規則を使用した構成上の規則 - 継承された会話 - Struts2 と完全に統合 - 会話スコープは Spring IoC コンテナー管理 Bean でも使用できます

それが誰かに役立つことを願っています。

于 2012-02-14T00:29:47.380 に答える