1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.seasar.cubby.validator;
18
19 import static org.seasar.cubby.CubbyConstants.ATTR_CONVERSION_FAILURES;
20
21 import java.util.List;
22 import java.util.Map;
23
24 import javax.servlet.http.HttpServletRequest;
25
26 import org.seasar.cubby.action.ActionErrors;
27 import org.seasar.cubby.action.FieldInfo;
28 import org.seasar.cubby.action.MessageInfo;
29 import org.seasar.cubby.internal.controller.ConversionFailure;
30 import org.seasar.cubby.internal.controller.ThreadContext;
31 import org.seasar.cubby.internal.util.RequestUtils;
32
33
34
35
36
37
38 public class ConversionValidationRule implements ValidationRule {
39
40
41 private final String resourceKeyPrefix;
42
43
44
45
46 public ConversionValidationRule() {
47 this(null);
48 }
49
50
51
52
53
54
55
56 public ConversionValidationRule(final String resourceKeyPrefix) {
57 this.resourceKeyPrefix = resourceKeyPrefix;
58 }
59
60
61
62
63 public void apply(final Map<String, Object[]> params, final Object form,
64 final ActionErrors errors) throws ValidationException {
65 final ThreadContext currentContext = ThreadContext.getCurrentContext();
66 final HttpServletRequest request = currentContext.getRequest();
67 final List<ConversionFailure> conversionFailures = RequestUtils
68 .getAttribute(request, ATTR_CONVERSION_FAILURES);
69 if (conversionFailures != null && !conversionFailures.isEmpty()) {
70 for (final ConversionFailure conversionFailure : conversionFailures) {
71 final MessageInfo messageInfo = conversionFailure
72 .getMessageInfo();
73 final String fieldNameKey;
74 if (resourceKeyPrefix == null) {
75 fieldNameKey = conversionFailure.getFieldName();
76 } else {
77 fieldNameKey = resourceKeyPrefix
78 + conversionFailure.getFieldName();
79 }
80 final String message = messageInfo.toMessage(fieldNameKey);
81 final FieldInfo[] fieldInfos = conversionFailure
82 .getFieldInfos();
83 errors.add(message, fieldInfos);
84 }
85 }
86 }
87
88 }