RedirectActionの設定方法
1つのActionクラスから別のActionクラスへリダイレクトする方法として、resultの形にredirectActionがあります。以下に設定例を示します。
@Namespace("/")
@Results({
@Result(name = ActionSupport.SUCCESS,
type = "redirectAction",
params = {
"actionName" , "otherAction"
}
),
})
public class redirectAction extends ActionSupport {
@Action("redirection")
public String sampleRedirect() throws Exception {
return SUCCESS;
}
}
これにより、/redirection をリクエストすると、/otherAction へリダイレクトします。
RedirectActionの特徴
リダイレクトなので、以下の特徴があります。
- リダイレクト元のActionとリダイレクト先のActionとではリクエストパラメータを共有しません。
- ブラウザに表示されるURLは、リダイレクト先のURLになります。
動的にURLも指定できる
Struts2の特徴として、設定値に変数を設定できます。
これはアノテーションでの設定でも同じです。
@Namespace("/")
@Results({
@Result(name = ActionSupport.SUCCESS,
type = "redirectAction",
params = {
"actionName" , "%{actionName}"
"namespace" , "%{namespace}"
}
),
})
public class redirectAction extends ActionSupport {
@Action("redirection")
public String sampleRedirect() throws Exception {
return SUCCESS;
}
private String actionName;
public String getActionName() {
return actionName;
}
private String namespace;
public String getNamespace() {
return namespace;
}
}
リダイレクト先にリクエストパラメータを引き継ぐ方法
Actionアノテーションのparamsに、追加するパラメータ名と値の設定もできます。
もちろん変数も可能です。次の例は、リダイレクト先のリクエストパラメータに対して、storeValの名前でActionクラスにあるstoreValの値を含める例です。
@Namespace("/")
@Results({
@Result(name = ActionSupport.SUCCESS,
type = "redirectAction",
params = {
"actionName" , "%{actionName}"
, "namespace" , "%{namespace}"
, "storeVal" , "%{storeVal}"
}
),
})
public class redirectAction extends ActionSupport {
@Action("redirection")
public String sampleRedirect() throws Exception {
return SUCCESS;
}
private String actionName;
public String getActionName() {
return actionName;
}
private String namespace;
public String getNamespace() {
return namespace;
}
private String storeVal;
public String getStoreVal() {
return storeVal;
}
public String setStoreVal(String storeVal) {
this.storeVal = storeVal;
}
}