2

私はstruts2フォームを持っています。このフォームでは、ユーザーはいくつかのフィールドに入力するよう求められます。これらのフィールドのうち 2 つは、別のアクションからオブジェクトを選択することによって埋められます。

実際には:メインフォーム=>ピックアップボタン=>入力する新しいフォームを持つ新しいアクション=>メインフォームに戻り、対応するフィールドに入力します。

私の問題は、ユーザーがサブアクションを終了した後、メインフォームに戻りたいが、以前に記入したものをすべて失いたくないということです...

これを処理する方法がわかりません。メインフォームからすべてのフィールドをサブアクションに渡す必要がありますか?

4

3 に答える 3

1

いくつかの方法が思い浮かびますが、要因に応じて最適な方法が決まります。

1) 保持したいすべてのパラメータを毎回送信します。これを行う最も簡単な方法は、隠しフィールドを使用することです。ここでは、モデル駆動型も意味があるかもしれません。または、複数のアクションを 1 つのクラスに配置することもできます。どちらの方法でも、これらのアクションが共通のプロパティ セットを共有することが強調されます。

2)Vasilyが推奨するようにセッションに値を保存しますが、Struts2にはスコープインターセプターがあります...これを頻繁に行う必要がある場合は、参照する価値があります(ページの最後の例を参照):http://struts.apache.org/ 2.3.1.2/docs/scope-in​​terceptor.htmlただし、これを正しく行うには少し注意が必要です。これがオフィス アプリケーションであり、ユーザーが私のようなものである場合、常に多数のウィンドウが開いていることになるからです。この状況では、トークンの追加も検討する必要があります ( struts2 トークン タグを参照)。)すべてのアクションが使用するグローバルストアから汚染されるのではなく、最新のデータを取得するために更新を行うときに、ダースのウィンドウの1つを防ぐ各「フロー」に。フロー/会話を処理する他の方法がいくつかあります...たとえば、誰かが今説明したものを実装すると思われるプラグインを書きました: http://code.google.com/p/struts2-conversation/

struts2 プラグインをざっと見て、車輪の再発明ではないことを確認することは常に価値がありますが、私はそのプラグインを保証することはできません.

3) ページから離れさせないでください。これは非常に巧妙です...追加のパラメータを選択する必要がある場合は、「ピックアップ」ボタンをクリックすると、必要なフィールドでフォームが展開され、このサブセクションで「更新」をクリックすると、フォームが閉じて残りが更新されますフィールドの。クライアント側の JS と、通常は XML または JSON 応答の組み合わせが必要になります。独自のページでは JSON の方が簡単です。JSON 応答を生成するには、struts2-json-pluginを参照してください。

ほとんどの場合、#3 を使用します。アクションが呼び出し元のアクションからのみ使用されることがわかっている場合、および/または非常にブックマークに安全なフォームが必要な場合 (可能であれば GET ですべてのパラメーターを渡す) は、おそらく #1 です。複数のアクションを連携させる必要があり、何らかの奇妙な理由で ajax を使用できなかった、より複雑なシナリオの #2。注 #3 と #2 はブックマークにあまり適していません。また、一般に、クライアント側のストレージを使用しないと、状態にあまり適していません。

于 2012-04-21T06:01:37.547 に答える
0

struts2 プラットフォームを機能させるには、次のものが必要です。

  1. フィールドを持つ 2 つのストラット フォーム クラス
  2. Struts アクション クラス
  3. jsp ページ
  4. Struts 構成ファイル

次に、以下のプロセスを実行します。

  • 最初のフォームがロードされたら、フィールドを介して 2 番目のフォームにその Bean を保存します
  • 最初のフォームから戻った後、上記のフィールドを介して2番目のフォームにフィールドをロードします
于 2012-04-20T09:58:46.977 に答える
0

メインフォームをセッションに保存します。

public class Test extends ActionSupport implements Preparable {

  private MainForm form;

  public void prepare(){
    form =     (MainForm)ServletActionContext.getRequest().getSession().getAttribute("mainForm");
    if(form == null) {
      form = new MainForm();
    }
  }

  public String execute(){
    //Do something useful
    //Do something useful
    //Do something useful
    return SUCCESS;
  }

  public MainForm getForm() {
    return form;
  }

  public void setForm(MainForm form) {
    this.form = form;
  }

「prepare」メソッドは、Preparable インターフェイスの一部です。これは、アクションを呼び出すたびに、すべてのパラメーター読み取りの前と「実行」メソッドの前に実行されます。

于 2012-04-20T09:49:18.137 に答える