01: package org.araneaframework.uilib.form;
02:
03: import java.util.Collection;
04: import java.util.HashSet;
05: import java.util.Iterator;
06: import java.util.Set;
07: import org.apache.commons.collections.set.ListOrderedSet;
08: import org.apache.commons.lang.StringEscapeUtils;
09: import org.araneaframework.jsp.tag.uilib.form.BaseFormElementHtmlTag;
10:
11: /**
12: * Form element validation error renderer which produces error messages directly
13: * attached to rendered {@link FormElement}s.
14: *
15: * @author Taimo Peelo (taimo@araneaframework.org)
16: * @since 1.1
17: */
18: public class LocalFormElementValidationErrorRenderer implements
19: FormElementValidationErrorRenderer {
20: private static final long serialVersionUID = 1L;
21: public static final LocalFormElementValidationErrorRenderer INSTANCE = new LocalFormElementValidationErrorRenderer();
22:
23: public void addError(FormElement element, String error) {
24: Set c = (Set) element
25: .getProperty(FormElementValidationErrorRenderer.ERRORS_PROPERTY_KEY);
26: if (c == null) {
27: // usually form element produces just one validation error message
28: c = ListOrderedSet.decorate(new HashSet(1));
29: element
30: .setProperty(
31: FormElementValidationErrorRenderer.ERRORS_PROPERTY_KEY,
32: c);
33: }
34:
35: c.add(error);
36: }
37:
38: public void clearErrors(FormElement element) {
39: element.setProperty(
40: FormElementValidationErrorRenderer.ERRORS_PROPERTY_KEY,
41: null);
42: }
43:
44: public String getClientRenderText(FormElement element) {
45: Collection messages = (Collection) element
46: .getProperty(FormElementValidationErrorRenderer.ERRORS_PROPERTY_KEY);
47: if (messages != null) {
48: String elScope = element.getScope().toString();
49:
50: StringBuffer sb = new StringBuffer(
51: "<script type=\"text/javascript\">");
52: sb.append("Aranea.UI.appendLocalFEValidationMessages('");
53:
54: // attach error messages to the same span that contains rendered form element
55: sb.append(BaseFormElementHtmlTag.FORMELEMENT_SPAN_PREFIX
56: + elScope + "', ");
57:
58: sb.append("\"<p");
59: sb.append(" class='" + RENDERED_FORMELEMENTERROR_STYLECLASS
60: + " " + elScope + "'");
61: sb.append(">");
62:
63: for (Iterator i = messages.iterator(); i.hasNext();) {
64: sb.append(getFormattedMessage(i.next().toString()));
65: }
66:
67: sb.append("</p>\");");
68: sb.append("</script>");
69:
70: return sb.toString();
71: }
72:
73: return "";
74: }
75:
76: protected String getFormattedMessage(String msg) {
77: return StringEscapeUtils.escapeJavaScript(msg);
78: }
79: }
|