Apache Struts - エラーの分離

Advertisement

エラーを分離する

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

Advertisement

ショートカット

634トップページ
このカテゴリのトップページに戻る
634ラボ

サイト検索

Google

Web サイト内

Y!ログール