1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.taglib.core;
20
21 import javax.servlet.jsp.tagext.TagSupport;
22 import javax.servlet.jsp.JspException;
23 import javax.faces.webapp.UIComponentClassicTagBase;
24 import javax.faces.webapp.UIComponentELTag;
25 import javax.faces.component.UIComponent;
26 import javax.faces.context.FacesContext;
27 import javax.el.ValueExpression;
28 import javax.el.ELContext;
29
30 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFJspAttribute;
31 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFJspTag;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 @JSFJspTag(name = "f:attribute", bodyContent = "empty")
59 public class AttributeTag extends TagSupport
60 {
61 private static final long serialVersionUID = 31476300171678632L;
62 private ValueExpression _nameExpression;
63 private ValueExpression _valueExpression;
64
65
66
67
68
69
70 @JSFJspAttribute(className="javax.el.ValueExpression",
71 deferredValueType="java.lang.String")
72 public void setName(ValueExpression nameExpression)
73 {
74 _nameExpression = nameExpression;
75 }
76
77
78
79
80
81
82 @JSFJspAttribute(className="javax.el.ValueExpression",
83 deferredValueType="java.lang.Object")
84 public void setValue(ValueExpression valueExpression)
85 {
86 _valueExpression = valueExpression;
87 }
88
89 @Override
90 public int doStartTag() throws JspException
91 {
92 UIComponentClassicTagBase componentTag = UIComponentELTag.getParentUIComponentClassicTagBase(pageContext);
93 if (componentTag == null)
94 {
95 throw new JspException("no parent UIComponentTag found");
96 }
97 UIComponent component = componentTag.getComponentInstance();
98 if (component == null)
99 {
100 throw new JspException("parent UIComponentTag has no UIComponent");
101 }
102
103 FacesContext facesContext = FacesContext.getCurrentInstance();
104 ELContext elContext = facesContext.getELContext();
105
106 String name = null;
107 Object value = null;
108 boolean isLiteral = false;
109
110 if (_nameExpression != null)
111 {
112 name = (String)_nameExpression.getValue(elContext);
113 }
114
115 if (_valueExpression != null)
116 {
117 isLiteral = _valueExpression.isLiteralText();
118 value = _valueExpression.getValue(elContext);
119 }
120
121 if (name != null)
122 {
123 if (component.getAttributes().get(name) == null)
124 {
125 if (isLiteral)
126 {
127 component.getAttributes().put(name, value);
128 }
129 else
130 {
131 component.setValueExpression(name, _valueExpression);
132 }
133 }
134 }
135
136 return SKIP_BODY;
137 }
138
139 @Override
140 public void release()
141 {
142 super.release();
143 _nameExpression = null;
144 _valueExpression = null;
145 }
146 }