- Revision
- 277
- Author
- fabio.kung
- Date
- 2007-07-24 16:24:52 -0500 (Tue, 24 Jul 2007)
Log Message
w:number tag to format numbers based on locale or given pattern
Modified Paths
Added Paths
- trunk/extensions/taglib/src/main/java/org/codehaus/waffle/taglib/form/NumberTag.java
- trunk/extensions/taglib-acceptance/src/main/webapp/number.jsp
Removed Paths
- trunk/extensions/taglib/src/main/java/org/apache/
Diff
Copied: trunk/extensions/taglib/src/main/java/org/codehaus/waffle/taglib/form/NumberTag.java (from rev 276, trunk/extensions/taglib/src/main/java/org/codehaus/waffle/taglib/form/DateTag.java) (0 => 277)
--- trunk/extensions/taglib/src/main/java/org/codehaus/waffle/taglib/form/NumberTag.java (rev 0) +++ trunk/extensions/taglib/src/main/java/org/codehaus/waffle/taglib/form/NumberTag.java 2007-07-24 21:24:52 UTC (rev 277) @@ -0,0 +1,141 @@ +package org.codehaus.waffle.taglib.form; + +import org.codehaus.waffle.taglib.LocaleSupport; + +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.el.ELException; +import javax.servlet.jsp.el.ExpressionEvaluator; +import java.io.IOException; +import java.io.Writer; +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.text.DecimalFormatSymbols; +import java.util.Locale; + +/** + * A formatted number element for html files. + * + * @author Fabio Kung + */ +// Decide whether to use locale always or not +public class NumberTag extends FormElement { + + private final LocaleSupport localeSupport = new LocaleSupport(); + private String name, pattern; + private Number value; + + @Override + public void release() { + super.release(); + clear(); + } + + private void clear() { + name = null; + pattern = null; + value = null; + } + + public void setName(String name) { + this.name = name; + } + + public void setPattern(String pattern) { + this.pattern = pattern; + } + + public void setValue(Number value) { + this.value = value; + } + + // Evaluates expressions as necessary + private void evaluateExpressions() throws ELException { + + ExpressionEvaluator evaluator = pageContext.getExpressionEvaluator(); + // 'name' attribute + if (name != null) { + name = (String) evaluator.evaluate(name, String.class, pageContext.getVariableResolver(), null); + } + // 'pattern' attribute + if (pattern != null) { + pattern = (String) evaluator.evaluate(pattern, String.class, pageContext.getVariableResolver(), null); + } + } + + // evaluates _expression_ and chains to parent + @Override + public int doStartTag() throws JspException { + + // evaluate any expressions we were passed, once per invocation + try { + evaluateExpressions(); + } catch (ELException e) { + throw new JspException(e); + } + + // chain to the parent implementation + return super.doStartTag(); + } + + @Override + public IterationResult start(Writer out) throws JspException, IOException { + + out.write("<input type=\""); + out.write(getType()); + out.write("\" name=\""); + out.write(name); + out.write("\" "); + out.write("value=\""); + if (this.value != null) { + out.write(getFormattedNumber()); + } else { + Number number = this.evaluateNumber("${" + this.name + "}"); + this.setValue(number); + if (number != null) { + out.write(getFormattedNumber()); + } + } + out.write("\""); + attributes.outputTo(out); + out.write("/>"); + clear(); + return IterationResult.BODY; + } + + private Number evaluateNumber(String _expression_) throws JspException { + try { + return (Number) pageContext.getExpressionEvaluator().evaluate( + _expression_, Number.class, pageContext.getVariableResolver(), + null); + } catch (ELException e) { + throw new JspException(e); + } + } + + private String getFormattedNumber() throws JspException { + NumberFormat formatter = getFormatter(); + return formatter.format(value); + } + + private NumberFormat getFormatter() { + NumberFormat formatter; + Locale locale = this.localeSupport.getFormattingLocale(pageContext); + if(pattern != null) { + DecimalFormat decimalFormat = new DecimalFormat(pattern); + decimalFormat.setDecimalFormatSymbols(new DecimalFormatSymbols(locale)); + formatter = decimalFormat; + } else { + formatter = NumberFormat.getNumberInstance(locale); + } + return formatter; + } + + protected String getType() { + return "text"; + } + + @Override + protected String getDefaultLabel() { + return name; + } +} \ No newline at end of file
Modified: trunk/extensions/taglib/src/main/resources/META-INF/waffle.tld (276 => 277)
--- trunk/extensions/taglib/src/main/resources/META-INF/waffle.tld 2007-07-24 18:22:39 UTC (rev 276) +++ trunk/extensions/taglib/src/main/resources/META-INF/waffle.tld 2007-07-24 21:24:52 UTC (rev 277) @@ -195,7 +195,44 @@ </attribute> </tag> + <!-- number --> <tag> + <name>number</name> + <tagclass>org.codehaus.waffle.taglib.form.NumberTag</tagclass> + <bodycontent>empty</bodycontent> + <dynamic-attributes>true</dynamic-attributes> + <description>Number tag</description> + <attribute> + <name>rendered</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + <type>java.lang.Boolean</type> + <description>If the field should be rendered or not.</description> + </attribute> + <attribute> + <name>value</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + <type>java.lang.Number</type> + <description>The number to be rendered and formatted.</description> + </attribute> + <attribute> + <name>name</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + <type>java.lang.String</type> + <description>Name of the field.</description> + </attribute> + <attribute> + <name>pattern</name> + <required>false</required> + <rtexprvalue>false</rtexprvalue> + <type>java.lang.String</type> + <description>number format pattern</description> + </attribute> + </tag> + + <tag> <name>select</name> <tagclass>org.codehaus.waffle.taglib.form.SelectTag</tagclass> <bodycontent>scriptless</bodycontent>
Copied: trunk/extensions/taglib-acceptance/src/main/webapp/number.jsp (from rev 276, trunk/extensions/taglib-acceptance/src/main/webapp/date.jsp) (0 => 277)
--- trunk/extensions/taglib-acceptance/src/main/webapp/number.jsp (rev 0) +++ trunk/extensions/taglib-acceptance/src/main/webapp/number.jsp 2007-07-24 21:24:52 UTC (rev 277) @@ -0,0 +1,29 @@ +<%@ taglib uri="http://waffle.codehaus.org" prefix="w" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> + +<%@ page contentType="text/html;encoding=iso-8859-1" %> +<%@ page import="java.lang.Number" %> + +<html> +<head> +</head> +<body > + +<% + pageContext.setAttribute("number",new Double(1234.567)); + pageContext.setAttribute("number2",new Double(1234.5)); +%> + +<fmt:setLocale value="pt_BR" /> + +Number Tag: +<br/> +without pattern <w:number id="asfsad" value="${number}" name="numberLocalized"/> +<br/> +with pattern <w:number name="d" value="${number2}" pattern="00,000.##"/> +<br/> +only name atribute:<w:number name="number" /> +<br/> +<br/> +</body > +</html>
To unsubscribe from this list please visit:
