1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.view.facelets.tag.jsf.core;
20
21 import java.io.IOException;
22
23 import javax.el.ELException;
24 import javax.faces.FacesException;
25 import javax.faces.component.UIComponent;
26 import javax.faces.view.facelets.FaceletContext;
27 import javax.faces.view.facelets.FaceletException;
28 import javax.faces.view.facelets.TagAttribute;
29 import javax.faces.view.facelets.TagConfig;
30 import javax.faces.view.facelets.TagException;
31 import javax.faces.view.facelets.TagHandler;
32
33 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFFaceletTag;
34
35
36
37
38
39 @JSFFaceletTag(
40 name = "f:passThroughAttribute",
41 bodyContent = "empty")
42 public final class PassThroughAttributeHandler extends TagHandler
43 implements javax.faces.view.facelets.AttributeHandler
44 {
45 private final TagAttribute _name;
46
47 private final TagAttribute _value;
48
49
50
51
52 public PassThroughAttributeHandler(TagConfig config)
53 {
54 super(config);
55 _name = getRequiredAttribute("name");
56 _value = getRequiredAttribute("value");
57 }
58
59
60
61
62
63
64 public void apply(FaceletContext ctx, UIComponent parent) throws IOException, FacesException, FaceletException,
65 ELException
66 {
67 if (parent == null)
68 {
69 throw new TagException(this.tag, "Parent UIComponent was null");
70 }
71
72
73 if (parent.getParent() == null)
74 {
75 String n = _name.getValue(ctx);
76 if (_value.isLiteral())
77 {
78 parent.getPassThroughAttributes().put(n, _value.getValue());
79 }
80 else
81 {
82 parent.getPassThroughAttributes().put(n, _value.getValueExpression(ctx, Object.class));
83 }
84 }
85 }
86
87 public String getAttributeName(FaceletContext ctx)
88 {
89 return _name.getValue(ctx);
90 }
91 }