Apache Struts
1月 1, 2003 · Posted in Apache Struts · Comment
Apache Struts
- 説明と初期設定
Strutsとは何か - インストール
Strutsのインストール - MVC
StrutsのMVC実装 - データの受け渡し(1)
Beanプロパティを画面に渡す(bean:write) - データの受け渡し(2)
繰り返し項目を画面に渡す(logic:iterate, bean:write) - データの受け渡し(3)
画面からの入力値を受け取る(ActionFormBean) - データの受け渡し(4)
画面からの入力値を受け取る(DynaActionForm) - データの受け渡し(5)
チェックボックスの利用(html:checkbox) - Tilesフレームワーク(1)
Tilesフレームワークの概要 - Tilesフレームワーク(2)
Tilesフレームワークを利用したサンプルアプリケーション - サブアプリケーション
コンフィギュレーションファイルの分割 - 他ページの読み込み
URIやリソース指定で他ファイルを読み込む(bean:include) - アクションエラーの分離
アクションエラーやアクションメッセージを分離する - アクションの分離
アクションを分離する(DispatchAction)
リンク
Apache Struts – アクションの分離(DispatchAction)
1月 1, 2003 · Posted in Apache Struts · Comment
アクションを分離する
ひとつのForm内に複数のsubmitボタンがあり、それぞれ異なるアクションを実行したい場合に、DispatchActionを利用することで、JavaScriptによるSubmitの制御や、if文による実行ロジックの判定などを排除することができる。
実装
submitボタンにproperty句を指定し、任意の名称を設定する。
<html:form action="/DispatchAction">
<html:submit property="command" value="add">add</html:submit>
<html:submit property="command" value="delete">delete</html:submit>
</html:form>
struts-config.xmlには parameter="[リクエストパラメータ名]"を設定する。
<action path="/DispatchAction"
type="struts.dispatchaction.DispatchActionSample"
name="DummyForm"
parameter="command"
scope="request">
<forward name="success"
path="/pages/dispatchaction/index.jsp" />
</action>
DispatchActionを継承したアクションクラスを作成し、html:submitボタンのvalue句に指定した名称と同様のメソッドを定義する。
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import util.logging.LogManager;
public class DispatchActionSample extends DispatchAction{
private Log log = LogManager.getLogger(this.getClass());
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception{
log.debug("add");
return mapping.findForward("success");
}
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception{
log.debug("delete");
return mapping.findForward("success");
}
}
これで、addボタン押下時にはaddメソッドが、deleteボタン押下時にはdeleteメソッドが実行されるようになる。
Apache Struts – エラーの分離
1月 1, 2003 · Posted in Apache Struts · Comment
エラーを分離する
Strutsでは発生したアクションエラー(ActionError, ActionMessage)がキーと値の組み合わせで一元管理されている。
異なるキーでエラーを格納することで、エラーを論理的に分離することができる。
異なるキーでエラーを格納することで、エラーを論理的に分離することができる。
エラーチェックコード
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;
public class ActionErrorsAction extends Action {
private static Log log = LogFactory.getLog(ActionErrorsAction.class);
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
log.debug(getClass().getName());
DynaActionForm dynaForm = (DynaActionForm)form;
String name = (String)dynaForm.get("name");
String userid = (String)dynaForm.get("userid");
String password = (String)dynaForm.get("password");
log.debug("name\t"+name);
log.debug("userid\t"+userid);
log.debug("password\t"+password);
ActionMessages errors = new ActionMessages();
if(isEmpty(name)){
errors.add("info", new ActionMessage("errors.required", "name"));
}
if(isEmpty(userid)){
errors.add("system", new ActionMessage("errors.required", "userid"));
}
if(isEmpty(password)){
errors.add("system", new ActionMessage("errors.required", "password"));
}
if(errors.size() > 0){
log.debug("error(s) info\t" + errors.size("info") + "件");
log.debug("error(s) system\t" + errors.size("system") + "件");
saveErrors(request, errors);
return mapping.getInputForward();
}
return mapping.findForward("success");
}
private boolean isEmpty(String param){
return (param == null || param.equals(""));
}
}
jspでの分離
<b>group1</b> <html:errors property="info"/> <b>group2</b> <html:errors property="system"/>
リダイレクトされたアクション内での分離(例:input=xxx.do)
ActionMessages messages = (ActionMessages)request.getAttribute(Globals.ERROR_KEY);
log.debug("info\t"+messages.size("info"));
log.debug("system\t"+messages.size("system"));

