Struts2(バージョン2.2.3)Webアプリケーションがあります。古いリンクを新しいページにリダイレクトしようとしています。私はこれを介してこれを行うことができることを知っています
<action name="old-action" class="MVRActionClass">
<result type="redirectAction">
<param name="actionName">new-action</param>
<param name="namespace">/new-action-namespace</param>
<param name="statusCode">301</param>
</result>
</action>
statusCode=301
ただし、これにより、最終的にリダイレクトされるURLにパラメーターが追加されます。私はこれが起こらないようにしたい。それで私は他のいくつかのアプローチを実装しましたが、うまくいきませんでした。
status
たとえば、アクションから戻る前に、応答オブジェクトにを設定しようとしました-
@Override
public String execute() {
...
((HttpServletResponse) response).setStatus(301);
return SUCCESS;
}
これは機能しませんでした。リンクのステータスはまだ302になっています。次に、インターセプターを作成し、PreResultListenerを次のように追加しました-
public class MyInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
invocation.addPreResultListener(new PreResultListener() {
@Override
public void beforeResult(ActionInvocation invocation, String resultCode) {
try {
ActionContext actionContext = invocation.getInvocationContext();
HttpServletResponse response = (HttpServletResponse).actionContext.get(StrutsStatics.HTTP_RESPONSE);
response.setStatus(301);
actionContext.put(StrutsStatics.HTTP_RESPONSE, response);
} catch(Exception e) {
invocation.setResultCode("error");
}
}
});
// Invocation Continue
return invocation.invoke();
}
}
}
これでもうまくいきませんでした。リンクのステータスはまだ302になっています。
私も調べましたredirect type=httpheader
。しかし、私はそれが私が正確に望んでいるものだとは思いません。redirectedToページのコンテンツ(新しいリンク)と一緒に301を送信する必要があるため。
サブクラス化してから禁止リストorg.apache.struts2.dispatcher.ServletActionRedirectResult
に追加することについての言及がいくつかあります。しかし、ワークフローにstatusCode
このカスタムを挿入する方法がわかりません。RedirectResult
どんな助けでも大歓迎です。