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.ui;
20
21 import java.io.IOException;
22
23 import javax.el.ELException;
24 import javax.el.ValueExpression;
25 import javax.faces.FacesException;
26 import javax.faces.component.UIComponent;
27 import javax.faces.view.facelets.FaceletContext;
28 import javax.faces.view.facelets.FaceletException;
29 import javax.faces.view.facelets.TagAttribute;
30 import javax.faces.view.facelets.TagConfig;
31 import javax.faces.view.facelets.TagHandler;
32
33 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFFaceletAttribute;
34 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFFaceletTag;
35 import org.apache.myfaces.view.facelets.AbstractFaceletContext;
36 import org.apache.myfaces.view.facelets.ELExpressionCacheMode;
37
38
39
40
41
42 @JSFFaceletTag(name="ui:param")
43 public class ParamHandler extends TagHandler
44 {
45
46
47
48
49 @JSFFaceletAttribute(
50 className="javax.el.ValueExpression",
51 deferredValueType="java.lang.String",
52 required=true)
53 private final TagAttribute name;
54
55
56
57
58 @JSFFaceletAttribute(
59 className="javax.el.ValueExpression",
60 deferredValueType="java.lang.String",
61 required=true)
62 private final TagAttribute value;
63
64
65
66
67 public ParamHandler(TagConfig config)
68 {
69 super(config);
70 this.name = this.getRequiredAttribute("name");
71 this.value = this.getRequiredAttribute("value");
72 }
73
74
75
76
77
78
79
80 public void apply(FaceletContext ctx, UIComponent parent) throws IOException, FacesException, FaceletException,
81 ELException
82 {
83 String nameStr = getName(ctx);
84 ValueExpression valueVE = getValue(ctx);
85
86 apply(ctx, parent, nameStr, valueVE);
87 }
88
89 public void apply(FaceletContext ctx, UIComponent parent, String nameStr, ValueExpression valueVE)
90 throws IOException, FacesException, FaceletException, ELException
91 {
92 AbstractFaceletContext actx = ((AbstractFaceletContext) ctx);
93 actx.getTemplateContext().setParameter(nameStr, valueVE);
94
95 if (actx.getTemplateContext().isAllowCacheELExpressions())
96 {
97 if (ELExpressionCacheMode.strict.equals(actx.getELExpressionCacheMode()) ||
98 ELExpressionCacheMode.allowCset.equals(actx.getELExpressionCacheMode()))
99 {
100 actx.getTemplateContext().setAllowCacheELExpressions(false);
101 }
102 }
103 }
104
105 public String getName(FaceletContext ctx)
106 {
107 return this.name.getValue(ctx);
108 }
109
110 public ValueExpression getValue(FaceletContext ctx)
111 {
112 return this.value.getValueExpression(ctx, Object.class);
113 }
114 }