1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.plugins;
17
18 import static org.seasar.cubby.CubbyConstants.ATTR_CONVERSION_ERRORS;
19 import static org.seasar.cubby.CubbyConstants.ATTR_PARAMS;
20 import static org.seasar.cubby.CubbyConstants.ATTR_VALIDATION_FAIL;
21 import static org.seasar.cubby.validator.ValidationUtils.getValidation;
22 import static org.seasar.cubby.validator.ValidationUtils.getValidationRules;
23
24 import java.util.Map;
25
26 import javax.servlet.http.HttpServletRequest;
27
28 import org.seasar.cubby.action.ActionContext;
29 import org.seasar.cubby.action.ActionErrors;
30 import org.seasar.cubby.action.ActionResult;
31 import org.seasar.cubby.action.Validation;
32 import org.seasar.cubby.internal.action.impl.ActionErrorsImpl;
33 import org.seasar.cubby.internal.controller.RequestParameterBinder;
34 import org.seasar.cubby.internal.controller.impl.RequestParameterBinderImpl;
35 import org.seasar.cubby.internal.util.RequestUtils;
36 import org.seasar.cubby.plugin.AbstractPlugin;
37 import org.seasar.cubby.plugin.ActionInvocation;
38 import org.seasar.cubby.validator.ValidationException;
39 import org.seasar.cubby.validator.ValidationFailBehaviour;
40 import org.seasar.cubby.validator.ValidationRules;
41
42
43
44
45
46
47 public class ValidationPlugin extends AbstractPlugin {
48
49
50 private final RequestParameterBinder requestParameterBinder = new RequestParameterBinderImpl();
51
52 @Override
53 public ActionResult invokeAction(final ActionInvocation invocation)
54 throws Exception {
55 final HttpServletRequest request = invocation.getRequest();
56 final Map<String, Object[]> parameterMap = RequestUtils.getAttribute(
57 request, ATTR_PARAMS);
58
59 final ActionContext actionContext = invocation.getActionContext();
60 final Object formBean = actionContext.getFormBean();
61
62 if (formBean != null) {
63 final ActionErrors conversionErros = new ActionErrorsImpl();
64 requestParameterBinder.bind(parameterMap, formBean, actionContext,
65 conversionErros);
66 request.setAttribute(ATTR_CONVERSION_ERRORS, conversionErros);
67 }
68
69 try {
70 final Validation validation = getValidation(actionContext
71 .getActionMethod());
72 if (validation != null) {
73 final ValidationRules validationRules = getValidationRules(
74 actionContext.getAction(), validation.rules());
75 validationRules.validate(parameterMap, formBean, actionContext
76 .getActionErrors());
77 }
78 return invocation.proceed();
79 } catch (final ValidationException e) {
80 request.setAttribute(ATTR_VALIDATION_FAIL, Boolean.TRUE);
81 final ValidationFailBehaviour behaviour = e.getBehaviour();
82 return behaviour.getValidationErrorActionResult(actionContext);
83 }
84 }
85
86 }