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
59
60
61
62
63
64
65 @JSFJspTag(
66 name="f:attribute",
67 bodyContent="empty")
68 public class AttributeTag
69 extends TagSupport
70 {
71 private static final long serialVersionUID = 31476300171678632L;
72 private ValueExpression _nameExpression;
73 private ValueExpression _valueExpression;
74
75
76
77
78
79
80 @JSFJspAttribute(
81 rtexprvalue=true,
82 className="java.lang.String")
83 public void setName(ValueExpression nameExpression)
84 {
85 _nameExpression = nameExpression;
86 }
87
88
89
90
91
92
93 @JSFJspAttribute(
94 rtexprvalue=true,
95 className="java.lang.Object")
96 public void setValue(ValueExpression valueExpression)
97 {
98 _valueExpression = valueExpression;
99 }
100
101
102 public int doStartTag() throws JspException
103 {
104 UIComponentClassicTagBase componentTag = UIComponentELTag.getParentUIComponentClassicTagBase(pageContext);
105 if (componentTag == null)
106 {
107 throw new JspException("no parent UIComponentTag found");
108 }
109 UIComponent component = componentTag.getComponentInstance();
110 if (component == null)
111 {
112 throw new JspException("parent UIComponentTag has no UIComponent");
113 }
114
115 FacesContext facesContext = FacesContext.getCurrentInstance();
116 ELContext elContext = facesContext.getELContext();
117
118 String name = null;
119 Object value = null;
120 boolean isLiteral = false;
121
122 if (_nameExpression != null)
123 {
124 name = (String) _nameExpression.getValue(elContext);
125 }
126
127 if (_valueExpression != null)
128 {
129 isLiteral = _valueExpression.isLiteralText();
130 value = _valueExpression.getValue(elContext);
131 }
132
133 if (name != null)
134 {
135 if (component.getAttributes().get(name) == null)
136 {
137 if (isLiteral)
138 {
139 component.getAttributes().put(name, value);
140 }
141 else
142 {
143 component.setValueExpression(name, _valueExpression);
144 }
145 }
146 }
147
148 return SKIP_BODY;
149 }
150
151
152
153
154 public void release()
155 {
156 super.release();
157 _nameExpression = null;
158 _valueExpression = null;
159 }
160
161 }