2

サーバー ファームのジョブを管理および構成するために、ほぼすべての従業員が使用する Struts 2 Web アプリケーションがあります。お客様が自分のジョブを確認し、そのステータス (「処理中」、「校正準備完了」、「終了」など) を非常に簡単に表示できるように、お客様用のダッシュボードを作成する計画に取り組んでいます。顧客が見ることができるすべてのページは、従業員のビューよりもはるかに情報が少なく、何かを編集または変更する方法はありません. しかし、最終的には、それらは本質的に同じ情報に対する 2 つの別個のビューであり、1 つは非常に単純で、もう 1 つはより複雑で制御可能です。

これを行う単純な方法は、すべての単一の jsp に if/else を含めることです。

<s:if test="user.role == 'customer'">
    <!-- TODO - Display simple customer view -->
</s:if>
<s:else>
    <!-- TODO - Display complex employee view -->
</s:else>

これを行う簡単な方法はありますか?"customer" という名前と "employee" (または default など) という名前の jsps の 2 つの別個のディレクトリを作成し、アクションでプロパティの Struts キーをオフにして、チェックするディレクトリを決定することはできますか?

または、これを行う別の方法はありますか?

4

2 に答える 2

1

これをコントローラー内で管理することをお勧めします。顧客の新しいビューを追加し、コントローラーでのユーザーの役割を確認して、適切なビューを表示します。これにより、既存のビューはそのままになり、顧客向けに真にカスタムビューを作成できるようになります。

于 2009-05-08T12:36:12.410 に答える
1

2 つのビューが完全に異なるのか、それとも顧客に特別なものがあるのか​​、それとも従業員に何か特別なものがあるのか​​ は、質問から明確ではありません。1 つのロールに余分なものがある場合は、共通部分を 1 つのファイルに、非共通部分を独自のファイルに入れ、インクルードまたはタイル (または同様のもの) を使用して JSP を組み合わせてページを作成します。

2 つのビューが完全に異なる場合は、別の JSP にする必要があります。その場合、Rich Kroll が提案しているように、アクションはロールに基づいて適切なビューに転送できます。

結果の定義を複製することについてのコメントについては、相互に排他的な 2 つの個別の機能がある場合、2 つのコード パスが必要です。最善の方法は、共通性を共有コード ファイルに分解することです。

アクション コードを簡素化する方法の 1 つは、このパターンを頻繁に行う場合、目的の転送名に最も一致する ActionForward を選択することです。

だから、もし通常あなたがするなら

return mapping.findForward("success");

このようなことができます

ActionForward defaultMapping = mapping.findForward("success");
ActionForward roleMapping = mapping.findForward(user.getRole() + "_success");
if (roleMapping != null) {
  return roleMapping ;
} else {
  return defaultMapping;
}

それを基本クラスのメソッドに入れると、アクションはどのビューに行くのかを知る必要がなくなります。次に、struts-config は次のようになります。

<action path="/home" class="HomeAction">
  <forward name="success" path="home.jsp"/>
</action>
<action path="/viewOrder" class="ViewOrderAction">
  <forward name="customer_success" path="customer_order.jsp"/>
  <forward name="employee_success" path="employee_order.jsp"/>
</action>

この場合、jsps が存在するかどうかを判断するために動的に jsps を検索するわけではありませんが、少なくともアクション コードをシンプルに保つことができます。

于 2009-05-08T13:11:31.080 に答える