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_FAILURES;
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.List;
25 import java.util.Map;
26
27 import javax.servlet.http.HttpServletRequest;
28
29 import org.seasar.cubby.action.ActionContext;
30 import org.seasar.cubby.action.ActionResult;
31 import org.seasar.cubby.action.Validation;
32 import org.seasar.cubby.internal.controller.ConversionFailure;
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
53
54
55
56
57
58 @Override
59 public ActionResult invokeAction(final ActionInvocation invocation)
60 throws Exception {
61 final HttpServletRequest request = invocation.getRequest();
62 final Map<String, Object[]> parameterMap = RequestUtils.getAttribute(
63 request, ATTR_PARAMS);
64
65 final ActionContext actionContext = invocation.getActionContext();
66 final Object formBean = actionContext.getFormBean();
67
68 if (formBean != null) {
69 final List<ConversionFailure> conversionFailures = requestParameterBinder
70 .bind(parameterMap, formBean, actionContext);
71 request.setAttribute(ATTR_CONVERSION_FAILURES, conversionFailures);
72 }
73
74 try {
75 final Validation validation = getValidation(actionContext
76 .getActionMethod());
77 if (validation != null) {
78 final ValidationRules validationRules = getValidationRules(
79 actionContext.getAction(), validation.rules());
80 validationRules.validate(parameterMap, formBean, actionContext
81 .getActionErrors());
82 }
83 return invocation.proceed();
84 } catch (final ValidationException e) {
85 request.setAttribute(ATTR_VALIDATION_FAIL, Boolean.TRUE);
86 final ValidationFailBehaviour behaviour = e.getBehaviour();
87 return behaviour.getValidationErrorActionResult(actionContext);
88 }
89 }
90
91 }