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

2009-07-27

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

前回のSAStrutsでエラーメッセージを設定してエラー画面に遷移する方法だと記述量が多いので扱いにくい。
static importや可変長パラメータを使用して書きやすくしてみた。

ユーティリティクラス
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

public class AppUtil {
public static ActionMessages getErrors(String msgKey, String ...args) {
ActionMessages errors = new ActionMessages();
errors.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage(msgKey, args));
return errors;
}
}


使用クラスメソッド(ここではアクションクラスのメソッド)
import static org.seasar.struts.util.ActionMessagesUtil.*;
import static org.seasar.struts.util.MessageResourcesUtil.*;
import org.seasar.struts.util.RequestUtil;
import static sample.AppUtil.*;
・・・
Integer id;
try {
id = Integer.parseInt(form.id);
} catch(NumberFormatException e) {
addErrors(RequestUtil.getRequest(),
getErrors("errors.integer", getMessage("labels.workstyleId")));
return "/error/";
}
・・・

2009-07-26

SAStrutsで時間の条件チェック

開始時間と終了時間の条件チェックを行う。
Validwhenで挑戦してみたが、できなかったのでメソッドを作成。
ミソは終了時間の最大を00:00としているところ。
画面表示時に24:00に書きかえる。

import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.seasar.framework.beans.converter.TimeConverter;

public ActionMessages validate() {
ActionMessages errors = new ActionMessages();
if (!endTime.equals("00:00")) {
TimeConverter timeConverter = new TimeConverter("HH:mm");
java.sql.Time startTimeValue
= (java.sql.Time) timeConverter.getAsObject(startTime);
java.sql.Time endTimeValue
= (java.sql.Time) timeConverter.getAsObject(endTime);
if (!startTimeValue.before(endTimeValue)) {
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"errors.startTimeBeforeEndTime"));
}
}
return errors;
}

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/";