ラベル strtus の投稿を表示しています。 すべての投稿を表示
ラベル strtus の投稿を表示しています。 すべての投稿を表示

2009-07-20

SAStrutsでURLにパラメータを渡したい、できる限り全画面で。

セッションが切れても場合分けできるようにURLで区別したい要望に対応したいと考えている。

SAStrutsでURLにパラメータを含めたい時はよくスラッシュ区切りを使用する。
これだとGETでやりとりするときは問題ないが、POSTで送信すると、パラメータがうまく設定できない。
POST処理そのもののURLに追加はできないとしても、せめてPOSTで保存完了後の画面のためにパラメータを渡したい。

全画面のURLにパラメータを含めたいが、うまく設定できない場合はPOSTにパラメータを設定してそれを読むようにしたい。
下記のように、urlPatternの違うメソッドを2つ用意して同じ処理を実行させる。

@Execute(input = "edit.jsp", urlPattern = "update/{viewId}", redirect = true)
public String updateByViewId() {
return update();
}

@Execute(input = "edit.jsp", redirect = true)
public String update() {
...
return "/deptView/index/" + form.viewId;
}

SAStrutsでエラーメッセージを設定してエラー画面に遷移する方法

アプリケーションに設定しているメッセージリソースをActionで取得してエラー画面で読み出すようにしてみた。

Actionでは以下の記述を追加する。
エラー画面はErrorActionを作成して飛ばしている。
リソースを参照して文字置換を行っている。
"{0}"の部分はObjectに渡しているが今回はlabelsにしていたメッセージに置換した。


import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ActionMessage;
import org.seasar.struts.util.ActionMessagesUtil;
import org.seasar.struts.util.MessageResourcesUtil;
import org.seasar.struts.util.RequestUtil;


ActionMessages errors = new ActionMessages();
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"errors.required"
new Object[] { MessageResourcesUtil.getMessage("labels.viewId") }));
ActionMessagesUtil.addErrors(RequestUtil.getRequest(), errors);
return "/error/";