DefaultForm

Anyframe Web에서는 Struts의 ActionForm을 확장하여 공통적으로 많이 쓰이는 validation check 메소드를 포함한 DefaultForm을 제공한다.

화면의 validate 처리를 ActionForm의 validate() method로 할 때 validation check 하는 로직은 공통적으로 쓰이는 경우가 많다. 이 때 Anyframe Web Framework 의 DefaultForm을 상속받아 ActionForm 클래스를 만들면 편리하게 validation check를 할 수 있다.
validate method 내에서 활용할 수 있는 공통적인 method들은 다음과 같다.
DefaultForm의 공통 메소드
  • containsInvalidChar : invalid character check
  • checkMaxLength : 최대 길이check
  • checkLength : 최소-최대 길이 check
  • checkRequired : 필수항목 입력 check

다음은 DefaultForm의 소스 코드 이다.
package anyframe.web.struts.common.action;

import org.apache.struts.action.ActionForm;

public abstract class DefaultForm extends ActionForm {

	protected boolean checkInvalidChar(String string, String[] invalidCharactors) {
        if (invalidCharactors == null)
            return true;
        for (int i = 0; i < invalidCharactors.length; i++) {
            if (string.indexOf(invalidCharactors[i]) >= 0)
                return false;
        }
        return true;
    }

	protected boolean checkMaxLength(String str, int max) {
        return !(str != null && str.getBytes().length > max);
    }

	protected boolean checkLength(String str, int min, int max) {
        if (min > 0 && str == null)
            return false;
        else if (str == null)
            str = "";
        if (str.trim().getBytes().length < min)
            return false;
        if (str.trim().getBytes().length > max)
            return false;
        return true;
    }

    protected boolean checkRequired(Object obj) {
        boolean ret = false;
        if (obj == null)
            return false;
        if (obj instanceof String)
            ret = ((String) obj).trim().length() == 0 ? false : true;
        return ret;
    }
}

Samples

ActionForm의 작성 예
다음은 DefaultForm을 상속하여 ActionForm의 validate 처리를 구현한 예이다.
public class BoardItemForm extends DefaultForm {
//중략 …
	
	public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        if (!checkRequiredFields(errors))
            return errors;
        checkInvalidCharacters(errors);
        checkMaxFieldSize(errors);
        return errors;
    }

	private boolean checkRequiredFields(ActionMessages messages) {
        boolean existRequiredFields = true;
        if (!checkRequired(resourceName)) {
            messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
                    "common.msg.required.error", "srx.ui.label.resource.name"));
            existRequiredFields = false;
        }
        if (!checkRequired(URI)) {
            messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
                    "common.msg.required.error", "srx.ui.label.resource.uri"));
            existRequiredFields = false;
        }
        if (!checkRequired(resourceType)) {
            messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
                    "common.msg.required.error", "srx.ui.label.resource.type"));
            existRequiredFields = false;
        }
        return existRequiredFields;
    }
    private void checkInvalidCharacters(ActionMessages messages) {
        if (!checkInvalidChar(resourceName))
            messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
                            "srx.msg.invalid.error.char",
                            "srx.ui.label.resource.name"));
	...                            

Resources