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 public abstract class ConverterELTag extends TagSupport
32 {
33 private static final long serialVersionUID = -616834506829108081L;
34
35 @Override
36 public int doStartTag() throws JspException
37 {
38 UIComponentClassicTagBase componentTag = UIComponentELTag.getParentUIComponentClassicTagBase(pageContext);
39 if (componentTag == null)
40 {
41 throw new JspException("no parent UIComponentTag found");
42 }
43 if (!componentTag.getCreated())
44 {
45 return Tag.SKIP_BODY;
46 }
47
48 UIComponent component = componentTag.getComponentInstance();
49 if (component == null)
50 {
51 throw new JspException("parent UIComponentTag has no UIComponent");
52 }
53 if (!(component instanceof ValueHolder))
54 {
55 throw new JspException("UIComponent is no ValueHolder");
56 }
57
58 Converter converter = createConverter();
59
60 ((ValueHolder)component).setConverter(converter);
61
62 return Tag.SKIP_BODY;
63 }
64
65 protected abstract Converter createConverter() throws JspException;
66 }