2

Struts 2を使用しています。

アクションからそれを呼び出したページに戻りたいと思います。

ページx.jspにいるとします。Visualアクションを呼び出して、セッションの CSS 設定を変更します。固定ページ (つまり、 home.jsp )ではなくx.jspに戻りたい

関連するstruts.xmlフラグメントは次のとおりです。

<アクション
   名前="ビジュアル"
   class="it.___.web.actions.VisualizationAction">
   <result name="home">/pages/home.jsp</result>
</アクション>

もちろんVisualizationAction.execute()帰ります

トリックを実行するために返すことができる「魔法の」定数(たとえば、INPUT_PAGEなど)はありますか?

より複雑な方法を使用する必要がありますか (つまり、要求ページを抽出して転送するなど)?

ティア

4

5 に答える 5

4

struts.xml で動的な結果を使用できます。例えば:

<action
   name="Visual"
   class="it.___.web.actions.VisualizationAction">
   <result name="next">${next}</result>
</action>

次に、アクションで next というフィールドを作成します。アクションを呼び出すには、次に転送するページの名前を渡します。その後、アクションは「next」を返し、struts はどのページに移動するかを認識します。

この投稿には、より適切な説明があります:スタック オーバーフロー

于 2008-10-14T20:36:06.363 に答える
1
return INPUT;

トリックを行います。INPUT定数は、アクションインターフェイス自体で定義されます。これは、アクションにさらに入力が必要であることを示しています。

アクション入力ページに移動したページを意味する場合はページを呼び出すことにより、入力ページはアクションのリクエストスコープにHTTPヘッダー「リファラー」を格納する必要があります。

于 2008-09-05T11:49:25.383 に答える
1

私のソリューションには、1 つのインターフェースと 1 つのインターセプターが含まれます。リダイレクトする可能性が高いすべてのアクションに対して、次のインターフェイスを実装します

public interface TargetAware {
  public String getTarget();
  public void setTarget(String target);
}

インターセプターは、必要に応じてターゲットが設定されていることを確認します。

public class SetTargetInterceptor extends MethodFilterInterceptor implements Interceptor {
   public String doIntercept(ActionInvocation invocation) {
      Object action = invocation.getAction();
      HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
      if (action instanceof TargetAware) {
         TargetAware targetAwareAction = (TargetAware) action;
         if (targetAwareAction.getTarget() == null)
            targetAwareAction.setTarget(getCurrentUri(request));
      }     
      return invocation.invoke();
   }

   // I'm sure we can find a better implementation of this...
   private static String getCurrentUri(HttpServletRequest request) {
      String uri = request.getRequestURI();
      String queryString = request.getQueryString();
      if (queryString != null && !queryString.equals(""))
         uri += "?" + queryString;
      return uri;
   }

   public void init() { /* do nothing */ }
   public void destroy() { /* do nothing */ }
}

その後、これら 2 つのビットが配置され、アクションがTargetAwareインターフェースを実装すると (それらにリダイレクトする必要があると予想される場合)、target必要なときにいつでも JSP 内のパラメーターにアクセスできます。そのパラメーターを your に渡しますVisualizationAction(インターフェースも実装する可能性がありTargetAwareます!) SUCCESS

<action name="Visual" class="it.___.web.actions.VisualizationAction">
   <result type="redirect">
      <param name="location">${target}</param>
      <param name="parse">true</param>
   </result>
</action>

この戦略のすべての詳細を試したわけではありません。特に、結果の型を囲む表記に注意してredirectください (Struts2 の特定のバージョンによっては、2.0.x と 2.1.x ではこれが異なる場合があります...)。

于 2009-01-15T18:15:26.130 に答える
0

わかりました、クラス it.___.web.actions.VisualizationAction で、INPUT を含む文字列値を返す必要があります。次に、struts.xml で次のように設定する必要があります。

<action name="Visual" class="it.___.web.actions.VisualizationAction">
   <result name="input">yourJspPage.jsp</result>
</action>

これにより、目的のページに移動します。これはうまくいくはずです。私は2か月間struts2に取り組んできました

于 2009-01-15T18:35:54.183 に答える
0

特定のアクションでユーザーをナビゲートする方法が好きです。

http://domain.com/myAction.action

現在の設計を変更したいという指標として、いくつかのパラメータを使用できます。

http://domain.com/myAction.action?changeDesign=silver_theme

次に、いくつかの struts 2 インターセプターを作成します。このロジックは、そのようなパラメーター 'changeDesign' の存在をチェックするためのものであり、このインターセプターは、設計変更の必要な作業を行い、ワークフローを制御します。インターセプターを使用すると、アクションを分野横断的なロジックから分離できます。

于 2008-10-23T14:27:57.647 に答える