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 org.apache.myfaces.shared.taglib.UIComponentELTagUtils;
22 import org.apache.myfaces.shared.util.LocaleUtils;
23
24 import javax.el.ELContext;
25 import javax.el.ValueExpression;
26 import javax.faces.context.FacesContext;
27 import javax.faces.convert.Converter;
28 import javax.faces.convert.NumberConverter;
29 import javax.servlet.jsp.JspException;
30 import javax.servlet.jsp.PageContext;
31 import java.util.Locale;
32
33
34
35
36
37 public class ConvertNumberTag extends ConverterTag
38 {
39 private static final long serialVersionUID = -8365745569697171573L;
40 private ValueExpression _currencyCode = null;
41 private ValueExpression _currencySymbol = null;
42 private ValueExpression _groupingUsed = null;
43 private ValueExpression _integerOnly = null;
44 private ValueExpression _locale = null;
45 private ValueExpression _maxFractionDigits = null;
46 private ValueExpression _maxIntegerDigits = null;
47 private ValueExpression _minFractionDigits = null;
48 private ValueExpression _minIntegerDigits = null;
49 private ValueExpression _pattern = null;
50 private ValueExpression _type = null;
51
52 public ConvertNumberTag()
53 {
54 setConverterIdString(NumberConverter.CONVERTER_ID);
55 }
56
57 public void setCurrencyCode(ValueExpression currencyCode)
58 {
59 _currencyCode = currencyCode;
60 }
61
62 public void setCurrencySymbol(ValueExpression currencySymbol)
63 {
64 _currencySymbol = currencySymbol;
65 }
66
67 public void setGroupingUsed(ValueExpression groupingUsed)
68 {
69 _groupingUsed = groupingUsed;
70 }
71
72 public void setIntegerOnly(ValueExpression integerOnly)
73 {
74 _integerOnly = integerOnly;
75 }
76
77 public void setLocale(ValueExpression locale)
78 {
79 _locale = locale;
80 }
81
82 public void setMaxFractionDigits(ValueExpression maxFractionDigits)
83 {
84 _maxFractionDigits = maxFractionDigits;
85 }
86
87 public void setMaxIntegerDigits(ValueExpression maxIntegerDigits)
88 {
89 _maxIntegerDigits = maxIntegerDigits;
90 }
91
92 public void setMinFractionDigits(ValueExpression minFractionDigits)
93 {
94 _minFractionDigits = minFractionDigits;
95 }
96
97 public void setMinIntegerDigits(ValueExpression minIntegerDigits)
98 {
99 _minIntegerDigits = minIntegerDigits;
100 }
101
102 public void setPattern(ValueExpression pattern)
103 {
104 _pattern = pattern;
105 }
106
107 public void setType(ValueExpression type)
108 {
109 _type = type;
110 }
111
112 @Override
113 public void setPageContext(PageContext context)
114 {
115 super.setPageContext(context);
116 setConverterIdString(NumberConverter.CONVERTER_ID);
117 }
118
119 @Override
120 protected Converter createConverter() throws JspException
121 {
122 NumberConverter converter = (NumberConverter)super.createConverter();
123 ELContext elContext = FacesContext.getCurrentInstance().getELContext();
124 if (null != _currencyCode)
125 {
126 converter.setCurrencyCode((String)UIComponentELTagUtils.evaluateValueExpression(elContext, _currencyCode));
127 }
128 if (null != _currencySymbol)
129 {
130 converter.setCurrencySymbol((String)UIComponentELTagUtils.evaluateValueExpression(elContext,
131 _currencySymbol));
132 }
133 if (null != _groupingUsed)
134 {
135 converter.setGroupingUsed(UIComponentELTagUtils.getBooleanValue(elContext, _groupingUsed));
136 }
137 else
138 {
139 converter.setGroupingUsed(true);
140 }
141 if (null != _integerOnly)
142 {
143 converter.setIntegerOnly(UIComponentELTagUtils.getBooleanValue(elContext, _integerOnly));
144 }
145 else
146 {
147 converter.setIntegerOnly(false);
148 }
149 if (null != _locale)
150 {
151 Locale locale;
152 if (_locale.isLiteralText())
153 {
154 locale = LocaleUtils.toLocale(_locale.getExpressionString());
155 }
156 else
157 {
158 Object localeValue = _locale.getValue(elContext);
159 if (localeValue instanceof Locale)
160 {
161 locale = (Locale)localeValue;
162 }
163 else
164 {
165 locale = LocaleUtils.toLocale(localeValue.toString());
166 }
167 if (null == locale)
168 {
169 locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
170 }
171 }
172 converter.setLocale(locale);
173 }
174 if (null != _maxFractionDigits)
175 {
176 converter.setMaxFractionDigits(UIComponentELTagUtils.getIntegerValue(elContext, _maxFractionDigits));
177 }
178 if (null != _maxIntegerDigits)
179 {
180 converter.setMaxIntegerDigits(UIComponentELTagUtils.getIntegerValue(elContext, _maxIntegerDigits));
181 }
182 if (null != _minFractionDigits)
183 {
184 converter.setMinFractionDigits(UIComponentELTagUtils.getIntegerValue(elContext, _minFractionDigits));
185 }
186 if (null != _minIntegerDigits)
187 {
188 converter.setMinIntegerDigits(UIComponentELTagUtils.getIntegerValue(elContext, _minIntegerDigits));
189 }
190 if (null != _pattern)
191 {
192 converter.setPattern((String)UIComponentELTagUtils.evaluateValueExpression(elContext, _pattern));
193 }
194 if (null != _type)
195 {
196 converter.setType((String)UIComponentELTagUtils.evaluateValueExpression(elContext, _type));
197 }
198 else
199 {
200 converter.setType("number");
201 }
202 return converter;
203 }
204 }