-
Struts2にはChainが用意されてて、
アクション→アクション
をやるとき、パラメータを引き継ぐことが出来る。
だけども、chainじゃなくてredirectしたいという我が儘へのヘルプ。日本語パラメータをURLに混ぜて送るの巻。
たとえば
http://hogeware/index.action?username=ながのみたいなリクエストを送りたいこともあるじゃんね。そのときIndexAction.javaの受けはこう書く。
private String username; /** * URLエンコード(Win31J)されたユーザ名を、デコードして設定します。 * @param username ユーザ名 */ public void setUsername(String username) { try { byte[] data = username.getBytes("ISO_8859_1"); this.username = new String(data, "Windows-31J"); } catch (UnsupportedEncodingException e) { //TODO なんか適当な処理。 } }この処理を噛ませることで、private username = "ながの" になります。
index.actionにリダイレクトさせる、元のアクションではゲッターを用意。
private String username; /** * ユーザ名を、Windows-31JでURLエンコードして返します。 * @return ユーザ名 */ public String getUsername() { try { username = URLEncoder.encode(username , "Windows-31J"); } catch (UnsupportedEncodingException e) { //TODO なんか適当な処理。 } return username; }struts.xmlはこんな感じで。
<result name="success" type="redirect"> /index.action?username=${username} </result>何をやってるかって言うと、
- 元のアクションが、successを返す。
- struts2は、index.actionにリダイレクト。
- 一緒にパラメータを持って行くために、元のアクションのゲッターを呼ぶ。
- ゲッターは、URLエンコードして返す。
- Struts2は、IndexAction.javaのセッターを呼ぶ。
- セッターは、バイト変換してからStringを生成、セット。
今回の書き方で出来たんでまあよし。弱点は、httpリクエストの256文字制限。長い文字列は送れないと思う。