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/11/03 21:09:21 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:
------------------------------------------------------------------------------
- Creating a new component for formatting numbers and dates according to locale, using literals (date, integer, decimal or currency). It's based on Output component.
+ A component to display formatted numbers and dates according to locale, using literals (integer, decimal, currency, date e date(MM/yyyy)). It's based on Tapestry Output component.
- === MyOutput.java ===
+ === OutputLocale.java ===
{{{
import java.text.DateFormat;
import java.text.DecimalFormat;
@@ -10, +10 @@
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
- import java.util.Locale;
import org.apache.tapestry.ComponentResources;
import org.apache.tapestry.MarkupWriter;
@@ -21, +20 @@
import org.apache.tapestry.ioc.services.ThreadLocale;
/** component that formats a value and outputs it. */
- public class MyOutput {
+ public class OutputLocale {
@Parameter(required = true)
private Object _value;
@@ -33, +32 @@
@Inject
private ComponentResources _resources;
-
+
@Inject
+ private RequestGlobals _requestGlobals;
- @Service("ThreadLocale")
- private ThreadLocale _threadLocale;
boolean beginRender(MarkupWriter writer) throws Exception {
String formatted = null;
- if (_format instanceof String) {
+ if (_format instanceof String)
+ {
- if (_format.toString().equalsIgnoreCase("integer"))
+ if (_format.toString().equalsIgnoreCase("integer")) // Syntax: format="literal:integer"
formatted = integer().format(_value);
- else if (_format.toString().equalsIgnoreCase("decimal"))
+ else if (_format.toString().equalsIgnoreCase("decimal")) // Syntax: format="literal:decimal"
formatted = decimal().format(_value);
- else if (_format.toString().equalsIgnoreCase("currency"))
+ else if (_format.toString().equalsIgnoreCase("currency")) // Syntax: format="literal:currency"
formatted = currency().format(_value);
- else if (_format.toString().substring(0, 4)
- .equalsIgnoreCase("date"))
+ // Null date.
+ else if (_format.toString().substring(0, 4).equalsIgnoreCase("date") && _value == null)
+ formatted = "";
+
+ else if (_format.toString().substring(0, 4).equalsIgnoreCase("date")) // Syntax: format="literal:date" or format="literal:date(MM/dd/yyyy)"
if (_format.toString().indexOf('(') >= 0) {
- if (_format.toString().indexOf(')') < 0)
+ if ((_format.toString().indexOf(')') < 0) ||
- throw new Exception(
- "Closing parenthesis does not exists");
- if (_format.toString().indexOf(')') < _format.toString().indexOf('(')
+ (_format.toString().indexOf(')') < _format.toString().indexOf('(')
- || _format.toString().indexOf(')') != _format.toString().length() - 1)
+ || _format.toString().indexOf(')') != _format.toString().length() - 1))
- throw new Exception("Syntax error! The correct syntax is format=\"literal:date\" or format=\"literal:date(stringPattern)\"");
-
- formatted = formatDate((Date) _value, _format.toString().substring(_format.toString().indexOf('(') + 1, _format.toString().indexOf(')')));
+ formatted = "?literal:"+_format.toString()+"?";
+ else {
+ try {
+ formatted = formatDate((Date) _value, _format.toString().substring(
+ _format.toString().indexOf('(') + 1,
+ _format.toString().indexOf(')')));
+ }
+ catch (Exception e) {
+ formatted = "?literal:"+_format.toString()+"?"; }
+ }
} else {
if (_format.toString().length() > 4)
- throw new Exception("Syntax error! The correct syntax is format=\"literal:date\" or format=\"literal:date(stringPattern)\"");
-
+ formatted = "?literal:"+_format.toString()+"?";
+ else
- formatted = date().format(_value);
+ formatted = date().format(_value);
-
}
else
-
- throw new Exception("Unknown literal format");
+
+ formatted = "?literal:"+_format.toString()+"?"; // Unknown literal format.
}
else {
@@ -102, +108 @@
return false;
}
- private Locale _localeDefault = _threadLocale.getLocale().getDefault();
-
public NumberFormat integer() {
- NumberFormat fmt = NumberFormat.getInstance(_localeDefault);
+ NumberFormat fmt = NumberFormat.getInstance(
+ _requestGlobals.getRequest().getLocale());
fmt.setMaximumFractionDigits(0);
return fmt;
}
public DecimalFormat decimal() {
- return (DecimalFormat) NumberFormat.getInstance(_localeDefault);
+ return (DecimalFormat) NumberFormat.getInstance(
+ _requestGlobals.getRequest().getLocale());
}
public DecimalFormat currency() {
- DecimalFormat fmt = (DecimalFormat) NumberFormat.getCurrencyInstance(_localeDefault);
+ DecimalFormat fmt = (DecimalFormat) NumberFormat.getCurrencyInstance(
+ _requestGlobals.getRequest().getLocale());
fmt.setDecimalSeparatorAlwaysShown(true);
fmt.setMaximumFractionDigits(2);
fmt.setMinimumFractionDigits(2);
@@ -124, +131 @@
public DateFormat date() {
return (DateFormat) DateFormat.getDateInstance(DateFormat.MEDIUM,
- _localeDefault);
+ _requestGlobals.getRequest().getLocale());
}
public String formatDate(Date d, String pattern) {
- SimpleDateFormat sdf = new SimpleDateFormat(pattern, _localeDefault);
+ SimpleDateFormat sdf = new SimpleDateFormat(pattern,
+ _requestGlobals.getRequest().getLocale());
- return (d==null?"":sdf.format(d));
+ return sdf.format(d);
}
}
}}}
[[BR]]
- Done. Now we need some page for test, something like:
+ Testing...
- === TestOutputLocaleNumber.java ===
+ === TestOutputLocale.java ===
{{{
package org.example.hilo.pages;
- public class TestOutputLocaleNumber
+ public class TestOutputLocale
{
private float _valor=12345.6789f;
@@ -159, +167 @@
}
}}}
- === TestOutputLocaleNumber.html ===
+ === TestOutputLocale.tml ===
{{{
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<head>
- <title>Output Locale Number</title>
+ <title>Output Locale</title>
</head>
<body>
@@ -179, +187 @@
${valor}</p>
<p>using format="literal:integer" results<br/>
- <span t:type="MyOutput" value="valor" format="literal:integer"/></p>
+ <span t:type="OutputLocale" value="valor" format="literal:integer"/></p>
<p>using format="literal:decimal" results<br/>
- <span t:type="MyOutput" value="valor" format="literal:decimal"/></p>
+ <span t:type="OutputLocale" value="valor" format="literal:decimal"/></p>
<p>using format="literal:currency" results<br/>
- <span t:type="MyOutput" value="valor" format="literal:currency"/></p>
+ <span t:type="OutputLocale" value="valor" format="literal:currency"/></p>
<p>using format="literal:date" results<br/>
- <span t:type="MyOutput" value="someDate" format="literal:date"/></p>
+ <span t:type="OutputLocale" value="someDate" format="literal:date"/></p>
<p>using format="literal:date(yyyy-MM-dd)" results<br/>
- <span t:type="MyOutput" value="someDate" format="literal:date(yyyy-MM-dd)"/></p>
+ <span t:type="OutputLocale" value="someDate" format="literal:date(yyyy-MM-dd)"/></p>
<p>using format="someFormat" acts exactly like in Output component</p>
@@ -203, +211 @@
}}}
[[BR]]
- As you can see here, we can extend components and learn a little more about Tapestry 5. Thank you Howard!
+ We can extend components and learn a little bit about Tapestry 5. Thank you Howard!
+ [[BR]][[BR]]
+ Marcus Veloso
[[BR]]
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org