S2StrutsのカスタムバリデートでFormFileの拡張子をチェック
FormFileのバリデートを作ろうと思ったんだが、実装クラスでFormFileのオブジェクトを取得するのにハマったんでメモ。
import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.apache.commons.validator.Field; import org.apache.commons.validator.Validator; import org.apache.commons.validator.ValidatorAction; import org.apache.struts.action.ActionMessages; import org.apache.struts.action.DynaActionForm; import org.apache.struts.upload.FormFile; import org.apache.struts.validator.Resources; import org.seasar.struts.interceptors.ProcessPojoFormInterceptor.SerializeBeanValidatorForm; public class FileSuffixValidator { public static boolean validate(Object bean, ValidatorAction validatorAction, Field field, ActionMessages errors, Validator validator, HttpServletRequest request) { boolean result = false; String paramPattern = field.getVarValue("pattern"); String[] patterns = paramPattern.split(","); FormFile formFile = null; // FormFileのオブジェクトがスマートに取れなかったんでこんなんやってます // なんか他にいい方法があるかわかんないけどひとまず。。。 if (bean instanceof SerializeBeanValidatorForm) { formFile = (FormFile) ((SerializeBeanValidatorForm)bean).getDynaBean().get(field.getProperty()); } if (bean instanceof DynaActionForm) { formFile = (FormFile) ((DynaActionForm)bean).get(field.getProperty()); } if (formFile != null && StringUtils.isNotEmpty(formFile.getFileName())) { String fileName = formFile.getFileName(); for (String pattern : patterns) { if (fileName.endsWith("." + pattern)) { result = true; break; } } } else { result = true; } if (!result) { errors.add(field.getKey(), Resources.getActionMessage( validator, request, validatorAction, field)); } return result; } }