web-dev-qa-db-ja.com

Struts 2で動的URLリダイレクトを行う方法は?

Struts2アプリで生成されたURLにリダイレクトしようとしています。この場合、URLに現在の日付、またはデータベースで検索した日付を使用します。したがって、/section/document/section/document/2008-10-06になります

これを行う最良の方法は何ですか?

26
Sietse

以下がその方法です。

Struts.xmlには、次のような動的な結果があります。

<result name="redirect" type="redirect">${url}</result>

アクションで:

private String url;

public String getUrl()
{
 return url;
}

public String execute()
{
 [other stuff to setup your date]
 url = "/section/document" + date;
 return "redirect";
}

これと同じテクノロジーを実際に使用して、OGNLを使用してstruts.xml内の任意の変数に動的な値を設定できます。 RESTfulリンクなどを含む、あらゆる種類の動的な結果を作成しました。クール。

61
Johnny Wey

annotationsとConventionプラグインを使用して、struts.xmlで繰り返し設定を行わないようにすることもできます。

@Result(location="${url}", type="redirect")

$ {url}は「getUrlメソッドの値を使用する」ことを意味します

14
Ivan Morales

誰かがActionClassに直接リダイレクトしたい場合:

public class RedirecActionExample extends ActionSupport {
HttpServletResponse response=(HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);

    url="http://localhost:8080/SpRoom-1.0-SNAPSHOT/"+date;
    response.sendRedirect(url);
    return super.execute(); 
}

編集:不足している引用を追加しました。

3
hari

StrutsのServletRedirectResultをサブクラス化し、doExecute()メソッドをオーバーライドして、super.doExecute()を呼び出す前にロジックを実行しました。次のようになります。

public class AppendRedirectionResult extends ServletRedirectResult {
   private DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

  @Override
  protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
    String date = df.format(new Date());
    String loc = "/section/document/"+date;
    super.doExecute(loc, invocation);
  }
}

これが最善の方法かどうかはわかりませんが、うまくいきます。

2
Sietse

アノテーションを使用して別のアクションにリダイレクトできます-

@Result(
    name = "resultName",
    type = "redirectAction",
    params = { "actionName", "XYZAction" }
)
1
tiwari.vikash

どのアクションが関係しているかに関係なく、インターセプターから直接リダイレクトできます。

struts.xml内

    <global-results>
        <result name="redir" type="redirect">${#request.redirUrl}</result>
    </global-results>

インターセプター内

@Override
public String intercept(ActionInvocation ai) throws Exception
{
    final ActionContext context = ai.getInvocationContext();        
    HttpServletRequest request = (HttpServletRequest)context.get(StrutsStatics.HTTP_REQUEST);
    request.setAttribute("redirUrl", "http://the.new.target.org");
    return "redir";
}
0
Aaron