質問

使っています ストラット2.

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

ページ内にいると言ってください x.jsp, セッション内の CSS 設定を変更するには、ビジュアル アクションを呼び出します。に戻りたいです x.jsp 固定ページではなく (つまり、 ホーム.jsp)

関連するものは次のとおりです struts.xml 断片:

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

もちろん私の VisualizationAction.execute() 戻り値 .

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

より複雑な方法を使用する必要があります (つまり、リクエストページを抽出してそこに転送します)?

ティア

役に立ちましたか?

解決

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

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

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

この投稿にはさらに詳しい説明があります。 スタックオーバーフロー

他のヒント

return INPUT;

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

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

私のソリューションには、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 内のパラメータを使用できます。そのパラメータを VisualizationAction (これは、 TargetAware インターフェイス!)、そして SUCCESS, 、Vincent Ramdhanie が説明したようにリダイレクトします。

<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 ではこの点が異なる場合があります...)。

私は、特定のアクションによってユーザーをナビゲートする場合の方法を好みます。

http://domain.com/myAction.action

現在のデザインを変更したいことを示すインジケーターとしてパラメーターを使用できます。つまり

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

次に、Struts 2 インターセプターを作成します。このロジックは、パラメーター「changeDesign」の存在をチェックするもので、このインターセプターはデザインの変更に必要な作業を実行し、ワークフローを制御します。インターセプターを使用すると、アクションを横断的なロジックから切り離すことができます。

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top