異なるデータレポート機能を実行する3つのアクションがあるstruts2プロジェクトがあります。ホームページに他の3つのアクションからのデータのスニペットを表示するために、ホームページアクションを作成中です。
現在、Home.actionは他の3つのアクションをインポートし、他のアクションオブジェクトを使用してデータを取得しています。これは「正しい」とは感じないので、Strutsでこれを行うための最良の方法は何でしょうか。できれば、元の3つのアクションをあまり編集せずに。
私も同様のジレンマを抱えていましたがstruts.xml
、アクションの結果のみを返す(周囲tiles
などを含まない)別のアクションを定義することで、それらを解決しました。
次に、を使用jQuery
してさまざまなアクションをフェッチしましたAjax
が、実際にサーバーにさまざまなリクエストのさまざまなアクションを計算させるという追加のボーナスがありました。したがって、ユーザーは結果の一部を他のユーザーよりも先に見ることができました。これは、アクションに3秒以上かかる場合に適しています。結果を計算します。
ここでのタイルの使用は、実際にはまったく関係がないことに注意してください。異なるJSPを使用するだけで同じ効果を得ることができます(少しカスタマイズされた外観が必要な場合を想定しています)。
私のloadBrokerReportアクションは、より大きな周囲のタイル(レイアウト)内にブローカーレポートを表示しますが、loadBrokerReportAjaxは同じActionクラスから同じメソッドを実行しますが、ajaxReport.jspファイルを介して結果をレンダリングします(これは混乱が少なく、次に表示するのに適しています他のものに)。
<!-- This is the normal action the users select from menu -->
<action name="loadBrokerReport" method="loadBrokerReport" class="ee.reinmets.intra.action.BrokerReportsAction">
<result type="tiles">brokerReport</result>
</action>
<!-- This is the action called via ajax -->
<action name="loadBrokerReportAjax" method="loadBrokerReport" class="ee.reinmets.intra.action.BrokerReportsAction">
<result>/WEB-INF/pages/brokerReports/ajaxReport.jsp</result>
</action>
<!-- This is the tile i'm referencing above, in tiles.xml -->
<definition name="brokerReport" extends="default">
<put-attribute name="body" value="/WEB-INF/pages/brokerReports/normalReport.jsp" />
</definition>