1

Struts 2 アプリケーションで以下のサンプルを検討してください。これはグリッドを表示するページで、ユーザーは同じグリッドを PDF にエクスポートできます。

2 つのアクションを持つクラスを開発します。1 つのアクションはグリッドを JSON として返し、もう 1 つのアクションは同じグリッドを PDF にエクスポートします。

コードの構造は次のとおりです。

2 つの異なるアクション マップが定義されており/ShowGrid/ExportGrid

@Action (name="ShowGrid") // Result will be set to JSON
@validation ( @Required (..... // Validation Rules for fromDate toDate etc
public String showGrid(){
gird = serviceFacade.getGrid(fromDate,toDate);
return SUCCESS;
}


@Action (name="ExportGrid" ) //Result will be set as stream
@validation ( @Required ..... // Validation Rules for fromDate toDate etc
public String exportGrid(){
grid = serviceFacade.getGrid(fromDate,toDate);
inputStream = convertGridToStream(grid); // By using jasper report or other tools
return SUCCESS;
}

ご覧のとおり、上記のメソッドには多くの共通構造があります。

  • 検証が重複しています(私の使用例では、検証ルールはLOTです)
  • サービスメソッドの呼び出しが重複しています

これを回避する方法はありますか?!

4

1 に答える 1

3

@Actions注釈を使用して、多くのアクションを同じメソッドにマップできます。アクション メソッド内で、アクション コンテキストから名前を取得し、ロジックを定義できます。

@Actions({
  @Action ("ExportGrid"), //Result will be set as stream
  @Action ("ShowGrid") // Result will be set to JSON
})
@validation ( @Required ..... // Validation Rules for fromDate toDate etc
public String doGrid(){
  grid = serviceFacade.getGrid(fromDate,toDate);
  if (ActionContext.getContext().getName().equals("ExportGrid")
    inputStream = convertGridToStream(grid); // By using jasper report or other tools
  return SUCCESS;
}
于 2014-05-25T20:57:18.597 に答える