Anyframe Web에서는 Struts의 ActionForm을 확장하여 공통적으로 많이 쓰이는 validation check 메소드를 포함한 DefaultForm을 제공한다.
화면의 validate 처리를 ActionForm의 validate() method로 할 때 validation check 하는 로직은 공통적으로 쓰이는 경우가 많다. 이 때 Anyframe Web Framework 의 DefaultForm을 상속받아 ActionForm 클래스를 만들면 편리하게 validation check를 할 수 있다.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;
}
}
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"));
...