28

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

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

4

6 に答える 6

65

方法は次のとおりです。

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 リンクなど、あらゆる種類の動的な結果を作成しました。クール。

于 2008-10-07T16:15:35.173 に答える
15

annotationsまた、struts.xml で繰り返し設定することを避けるために、Convention プラグインを使用することもできます。

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

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

于 2009-03-30T11:16:56.930 に答える
2

結局、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);
  }
}

これが最善の方法かどうかはわかりませんが、機能します。

于 2008-10-06T12:43:06.540 に答える
1

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

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";
}
于 2016-11-03T13:07:58.483 に答える
1

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

@Result(
    name = "resultName",
    type = "redirectAction",
    params = { "actionName", "XYZAction" }
)
于 2014-07-22T15:17:06.217 に答える