1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package javax.faces.webapp;
20
21 import javax.faces.component.UIComponent;
22 import javax.faces.component.ValueHolder;
23 import javax.faces.convert.Converter;
24 import javax.servlet.jsp.JspException;
25 import javax.servlet.jsp.tagext.Tag;
26 import javax.servlet.jsp.tagext.TagSupport;
27
28
29
30
31
32
33
34 public abstract class ConverterELTag
35 extends TagSupport
36 {
37 private static final long serialVersionUID = -616834506829108081L;
38
39 public int doStartTag()
40 throws JspException
41 {
42 UIComponentClassicTagBase componentTag = UIComponentELTag.getParentUIComponentClassicTagBase(pageContext);
43 if (componentTag == null)
44 {
45 throw new JspException("no parent UIComponentTag found");
46 }
47 if (!componentTag.getCreated())
48 {
49 return Tag.SKIP_BODY;
50 }
51
52 UIComponent component = componentTag.getComponentInstance();
53 if (component == null)
54 {
55 throw new JspException("parent UIComponentTag has no UIComponent");
56 }
57 if (!(component instanceof ValueHolder))
58 {
59 throw new JspException("UIComponent is no ValueHolder");
60 }
61
62 Converter converter = createConverter();
63
64 ((ValueHolder)component).setConverter(converter);
65
66 return Tag.SKIP_BODY;
67 }
68
69 protected abstract Converter createConverter()
70 throws JspException;
71 }