You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by Apache Wiki <wi...@apache.org> on 2007/06/26 05:29:36 UTC
[Tapestry Wiki] Update of "Tapestry5OutputLocaleNumber" by MarcusVeloso
Dear Wiki user,
You have subscribed to a wiki page or wiki category on "Tapestry Wiki" for change notification.
The following page has been changed by MarcusVeloso:
http://wiki.apache.org/tapestry/Tapestry5OutputLocaleNumber
The comment on the change is:
Initial changes.
New page:
Creating a new component for formatting (numbers) according to locale, using literals (integer, decimal or currency). It's based on Output component.
=== MyOutput.java ===
{{{
package org.example.hilo.components;
import java.text.DecimalFormat;
import java.text.Format;
import java.text.NumberFormat;
import java.util.Locale;
import org.apache.tapestry.ComponentResources;
import org.apache.tapestry.MarkupWriter;
import org.apache.tapestry.annotations.Inject;
import org.apache.tapestry.annotations.Parameter;
import org.apache.tapestry.annotations.Service;
import org.apache.tapestry.ioc.internal.util.InternalUtils;
import org.apache.tapestry.ioc.services.ThreadLocale;
/** component that formats a value and outputs it. */
public class MyOutput
{
@Parameter(required = true)
private Object _value;
@Parameter(required = true)
private Object _format;
@Parameter("componentResources.elementName")
private String _elementName;
@Inject
private ComponentResources _resources;
@Inject
@Service("ThreadLocale")
private ThreadLocale _threadLocale;
private Locale _localeDefault = _threadLocale.getLocale().getDefault();
boolean beginRender(MarkupWriter writer)
{
String formatted = null;
if (_format instanceof String)
{
if (_format.toString().equalsIgnoreCase("integer"))
formatted = integer().format(_value);
else if (_format.toString().equalsIgnoreCase("decimal"))
formatted = decimal().format(_value);
else if (_format.toString().equalsIgnoreCase("currency"))
formatted = currency().format(_value);
else
formatted = "unknown literal format";
}
else {
formatted = ((Format)_format).format(_value);
}
if (InternalUtils.isNonBlank(formatted))
{
if (_elementName != null)
{
writer.element(_elementName);
_resources.renderInformalParameters(writer);
}
writer.write(formatted);
if (_elementName != null) writer.end();
}
return false;
}
public NumberFormat integer()
{
NumberFormat fmt = NumberFormat.getInstance(_localeDefault);
fmt.setMaximumFractionDigits(0);
return fmt;
}
public DecimalFormat decimal()
{
return (DecimalFormat)NumberFormat.getInstance(_localeDefault);
}
public DecimalFormat currency()
{
DecimalFormat fmt = (DecimalFormat)
NumberFormat.getCurrencyInstance(_localeDefault);
fmt.setDecimalSeparatorAlwaysShown(true);
fmt.setMaximumFractionDigits(2);
fmt.setMinimumFractionDigits(2);
return fmt;
}
}
}}}
[[BR]]
Done. Now we need some page for test, something like:
=== TestOutputLocaleNumber.java ===
{{{
package org.example.hilo.pages;
public class TestOutputLocaleNumber
{
private float _valor=12345.6789f;
public float getValor() {
return _valor;
}
}
}}}
=== TestOutputLocaleNumber.html ===
{{{
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<head>
<title>Output Locale Number</title>
</head>
<body>
<center>
<h1>Output Locale Number</h1>
<form t:type="Form">
<p>Number is 12345.6789</p>
<p>using expansion results<br/>
${valor}</p>
<p>using format="literal:integer" results<br/>
<span t:type="MyOutput" value="valor" format="literal:integer"/></p>
<p>using format="literal:decimal" results<br/>
<span t:type="MyOutput" value="valor" format="literal:decimal"/></p>
<p>using format="literal:currency" results<br/>
<span t:type="MyOutput" value="valor" format="literal:currency"/></p>
<p>using format="someFormat" acts exactly like in Output component</p>
</form>
</center>
</body>
</html>
}}}
[[BR]]
As you can see here, we can extend components and learn a little more about Tapestry 5. Thank you Howard!
[[BR]]
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org