Seasar/Struts チョットデキルマンのみなさんには常識かと思われますが、@Execute
の属性に redirect=true
を指定してるのに実際はフォワードで遷移することがあったり、そのあたりの挙動がイマイチ理解できてないので少し調べてみます。
デフォルトはフォワード
Super Agile Struts - Annotation Reference
redirect要素(オプション) 遷移先にリダイレクトで遷移するかどうかを指定します。 デフォルトはfalseで、リダイレクトはしません。
redirect=true
を指定するとリダイレクトになる。
エラーメッセージがあるときはフォワード
sa-struts/ActionWrapper.java at master · seasarorg/sa-struts · GitHub
if (redirect && ActionMessagesUtil.hasErrors(request)) { redirect = false; }
ActionWrapper の execute
の中でエラーメッセージがあるかチェックしてフラグを上書きしている。この場合、@Execute
に redirect=true
を指定してもフォワードになる。
Action メソッドで返却するパスの末尾に redirect=true
を付けるとリダイレクト
Super Agile Struts - Feature Reference
リダイレクトで遷移したい場合は、 パスの最後にredirect=trueを追加します。 =の前後に余分な空白は含めないでください。 redirect=trueの部分は、実際に実行されるときには、消去されます。
sa-struts/S2ActionMapping.java at master · seasarorg/sa-struts · GitHub
if (path.endsWith(REDIRECT)) { redirect = true; path = path.substring(0, path.length() - REDIRECT.length() - 1); }
S2ActionMapping の createForward
の中で redirect=true
があるかチェックしてフラグを上書きしている。この場合、エラーメッセージがあってもなくても強制的にリダイレクトになる。
現場からは以上です。