質問
使っています ストラット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 に取り組んできました。