You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gc...@apache.org on 2007/11/16 00:56:44 UTC
svn commit: r595495 - in /myfaces/trinidad/trunk/trinidad:
trinidad-examples/trinidad-demo/src/main/webapp/components/
trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/
trinidad-impl/src/main/java/org/apache/myfaces/trinidadinter...
Author: gcrawford
Date: Thu Nov 15 15:56:42 2007
New Revision: 595495
URL: http://svn.apache.org/viewvc?rev=595495&view=rev
Log:
TRINIDAD-797 Date-picker does not use the converter's locale attribute if it differs from page locale
Patch provided by Yee-Wah Lee - thanks Yee-Wah.
1. Creates a scriptlet which loads a specified (named) locale.
2. Calls DateTimeConverter to load the scriptlet when a non-page locale is requested.
3. Adds examples of #2 in inputDate.jspx
Added:
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/NamedLocaleInfoScriptlet.java
Modified:
myfaces/trinidad/trunk/trinidad/trinidad-examples/trinidad-demo/src/main/webapp/components/inputDate.jspx
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/DateTimeConverter.java
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/LibraryScriptlet.java
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/LocaleInfoScriptlet.java
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/XhtmlScriptletFactory.java
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/resource/TrTranslationsResourceLoader.java
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/DateFieldFormat.js
Modified: myfaces/trinidad/trunk/trinidad/trinidad-examples/trinidad-demo/src/main/webapp/components/inputDate.jspx
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-examples/trinidad-demo/src/main/webapp/components/inputDate.jspx?rev=595495&r1=595494&r2=595495&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-examples/trinidad-demo/src/main/webapp/components/inputDate.jspx (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-examples/trinidad-demo/src/main/webapp/components/inputDate.jspx Thu Nov 15 15:56:42 2007
@@ -68,6 +68,28 @@
label="attached converter">
<tr:convertDateTime secondaryPattern="d/M/yyyy" pattern="yyyy/M/d" />
</tr:inputDate>
+
+ <tr:outputFormatted styleUsage="instruction"
+ value="<b>A inputDate with a converter attached from fr_FR locale (has 2-digit display for hours)</b>"/>
+ <tr:inputDate id="mdf6" value="#{date.date5}"
+ label="attached converter with locale fr_FR">
+ <tr:convertDateTime locale="fr_FR" type="both" dateStyle="full"/>
+ </tr:inputDate>
+
+ <tr:outputFormatted styleUsage="instruction"
+ value="<b>A inputDate with a converter attached from fr_BE locale (has 1-digit display for hours)</b>"/>
+ <tr:inputDate id="mdf7" value="#{date.date5}"
+ label="attached converter with locale fr_BE">
+ <tr:convertDateTime locale="fr_BE" type="both" dateStyle="full"/>
+ </tr:inputDate>
+
+ <tr:outputFormatted styleUsage="instruction"
+ value="<b>A inputDate with a converter attached from ja locale</b>"/>
+ <tr:inputDate id="mdf8" value="#{date.date5}"
+ label="attached converter with locale ja">
+ <tr:convertDateTime locale="ja" type="date" dateStyle="full"/>
+ </tr:inputDate>
+
</tr:panelGroupLayout>
</tr:panelHeader>
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/DateTimeConverter.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/DateTimeConverter.java?rev=595495&r1=595494&r2=595495&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/DateTimeConverter.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/convert/DateTimeConverter.java Thu Nov 15 15:56:42 2007
@@ -19,8 +19,11 @@
package org.apache.myfaces.trinidadinternal.convert;
import java.io.IOException;
+
import java.text.DateFormat;
import java.text.SimpleDateFormat;
+
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
@@ -45,6 +48,7 @@
import org.apache.myfaces.trinidadinternal.ui.laf.base.xhtml.XhtmlLafUtils;
import org.apache.myfaces.trinidadinternal.util.JsonUtils;
+
/**
* <p>
* This class implements client side equivalent of DateTimeConverter. This class
@@ -150,7 +154,8 @@
_LOG
.severe("The component is null, but it is needed for the client id, so no script written");
return null;
- }
+ }
+
// Add a JavaScript Object to store the datefield formats
// on the client-side. We currently store the format string
// for each and every field. It'd be more efficient to have
@@ -170,11 +175,12 @@
// this fetch could be at the place where we append, but has been
// moved ahead to optimize use of StringBuilder
String jsPattern = getJSPattern(context);
+ String loc = _getLocaleString (context);
// FIX - figure out size!!!
- // 65 chars for javascript + length of jspattern + 12 chars for
+ // 127 chars for javascript + length of jspattern + locale + 12 chars for
// tranforming to name in the worst case.
- StringBuilder buff = new StringBuilder(77 + jsPattern.length());
+ StringBuilder buff = new StringBuilder(139 + jsPattern.length() + loc.length());
if (requestMap.get(_PATTERN_WRITTEN_KEY) == null)
{
@@ -182,7 +188,7 @@
// only create the _dfs object if it doesn't exist, so we don't
// wipe out _dfs[xxx] values if we ppr the first date field on a
// page with multiple date fields.
- buff.append("if(window['_dfs'] == undefined){var _dfs=new Object();}");
+ buff.append("if(window['_dfs'] == undefined){var _dfs=new Object();}if(window['_dl'] == undefined){var _dl=new Object();}");
}
buff.append("_dfs[\"");
@@ -191,6 +197,12 @@
buff.append(jsPattern);
buff.append(";");
+ buff.append("_dl[\"");
+ buff.append(clientId);
+ buff.append("\"]=");
+ buff.append(loc);
+ buff.append(";");
+
return buff.toString();
} else
{
@@ -202,13 +214,6 @@
public String getClientConversion(FacesContext context, UIComponent component)
{
- // for now, we are disabling the client-side validation when the
- // locale is not the page's locale.
- if (_isDifferentLocale())
- {
- return null;
- }
-
String jsPattern = getJSPattern(context);
Map<String, String> messages = new HashMap<String, String>();
if (jsPattern != null)
@@ -244,7 +249,17 @@
StringBuilder outBuffer = new StringBuilder();
outBuffer.append("new TrDateTimeConverter(");
outBuffer.append(jsPattern);
- outBuffer.append(",null,'");
+ Locale loc = getLocale ();
+ if (loc != null)
+ {
+ outBuffer.append(",'");
+ outBuffer.append (loc.toString());
+ outBuffer.append ("','");
+ }
+ else
+ {
+ outBuffer.append (",null,'");
+ }
outBuffer.append(exampleString);
outBuffer.append("','");
outBuffer.append(escapedType);
@@ -278,7 +293,24 @@
public Collection<String> getClientImportNames()
{
- return _IMPORT_NAMES;
+ // Load the library for the different locale, so that the locale elements
+ // are available for the client converter and validator.
+ if (_isDifferentLocale())
+ {
+ ArrayList<String> names = new ArrayList<String>(2);
+ names.add ("TrDateTimeConverter()");
+ // Load NamedLocaleInfoScriptlet "LocaleInfo_<locale>"
+ String sloc = getLocale().toString();
+ StringBuffer sb = new StringBuffer (11 + sloc.length());
+ sb.append ("LocaleInfo_");
+ sb.append (sloc);
+ names.add (sb.toString());
+ return names;
+ }
+ else
+ {
+ return _IMPORT_NAMES;
+ }
}
public String getClientLibrarySource(FacesContext context)
@@ -516,6 +548,26 @@
buffer.append("']");
}
return buffer.toString();
+ }
+
+ private String _getLocaleString (FacesContext context)
+ {
+ Locale dateTimeConverterLocale = getLocale();
+ if (dateTimeConverterLocale != null)
+ {
+ Locale defaultLocale = RenderingContext.getCurrentInstance()
+ .getLocaleContext().getFormattingLocale();
+ if (!(dateTimeConverterLocale.equals (defaultLocale)))
+ {
+ String loc = dateTimeConverterLocale.toString();
+ StringBuffer sb = new StringBuffer (2 + loc.length());
+ sb.append ("'");
+ sb.append (loc);
+ sb.append ("'");
+ return (sb.toString());
+ }
+ }
+ return "null";
}
// Bug 4570591
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/LibraryScriptlet.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/LibraryScriptlet.java?rev=595495&r1=595494&r2=595495&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/LibraryScriptlet.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/LibraryScriptlet.java Thu Nov 15 15:56:42 2007
@@ -93,7 +93,7 @@
outputDependency(context, arc, _dependencies[i]);
}
- XhtmlUtils.writeLibImport(context, arc, _getLibraryURL(context, arc));
+ XhtmlUtils.writeLibImport(context, arc, getLibraryURL(context, arc));
}
@Override
@@ -127,7 +127,7 @@
return libraryName;
}
- private String _getLibraryURL(
+ protected String getLibraryURL(
FacesContext context,
RenderingContext arc)
{
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/LocaleInfoScriptlet.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/LocaleInfoScriptlet.java?rev=595495&r1=595494&r2=595495&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/LocaleInfoScriptlet.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/LocaleInfoScriptlet.java Thu Nov 15 15:56:42 2007
@@ -23,14 +23,15 @@
import java.util.HashMap;
import java.util.Locale;
-import javax.faces.context.ResponseWriter;
import javax.faces.context.FacesContext;
-import org.apache.myfaces.trinidad.context.RenderingContext;
-import org.apache.myfaces.trinidad.context.LocaleContext;
+import javax.faces.context.ResponseWriter;
-import org.apache.myfaces.trinidadinternal.ui.laf.base.xhtml.LocaleList;
+import org.apache.myfaces.trinidad.context.LocaleContext;
+import org.apache.myfaces.trinidad.context.RenderingContext;
import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.XhtmlRenderer;
import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.XhtmlUtils;
+import org.apache.myfaces.trinidadinternal.ui.laf.base.xhtml.LocaleList;
+
/**
* Scriptlet for registering locale information.
@@ -113,8 +114,7 @@
FacesContext context,
RenderingContext arc)
{
- Locale elementsLocale = _getJSLocaleElementsLocale(
- arc.getLocaleContext().getFormattingLocale());
+ Locale elementsLocale = _getJSLocaleElementsLocale(getFormattingLocale(arc));
String var = getSupportedLocaleVariant(arc);
if (var != null)
{
@@ -135,6 +135,10 @@
return buffer.toString();
}
+ protected Locale getFormattingLocale(RenderingContext arc) {
+ return arc.getLocaleContext().getFormattingLocale();
+ }
+
/**
* Returns the locale variant type to use when formatting dates. The locale
* variant is a configuration parameter. It defaults to Java style locale
@@ -155,7 +159,7 @@
return null;
}
-
+
/**
* Returns the Locale to use for loading a JavaScript resource,
* given an input Locale
@@ -199,6 +203,7 @@
return outLocale;
}
}
+
static private final String _RESOURCE_BASE = "resources/LocaleElements_";
static private final Scriptlet _sInstance = new LocaleInfoScriptlet();
Added: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/NamedLocaleInfoScriptlet.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/NamedLocaleInfoScriptlet.java?rev=595495&view=auto
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/NamedLocaleInfoScriptlet.java (added)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/NamedLocaleInfoScriptlet.java Thu Nov 15 15:56:42 2007
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.jsLibs;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Locale;
+
+import javax.faces.context.FacesContext;
+
+import org.apache.myfaces.trinidad.context.RenderingContext;
+import org.apache.myfaces.trinidadinternal.ui.laf.base.xhtml.LocaleList;
+
+
+/**
+ * Scriptlet for registering locale information. This scriptlet can be used to
+ * locale information on demand, e.g. when a component runs in a different locale
+ * than the page locale.
+ * @version $Name: $ ($Revision: adfrt/faces/adf-faces-impl/src/main/java/oracle/adfinternal/view/faces/renderkit/core/xhtml/jsLibs/LocaleInfoScriptlet.java#0 $) $Date: 10-nov-2005.19:02:47 $
+ */
+class NamedLocaleInfoScriptlet extends LocaleInfoScriptlet
+{
+ public static void registerNamedLocales ()
+ {
+ HashMap<Locale, Locale> supportedMap = LocaleList.getSupportedLocales();
+ Iterator<Locale> locales = supportedMap.keySet().iterator();
+
+ while (locales.hasNext())
+ {
+ Locale l = locales.next();
+ NamedLocaleInfoScriptlet ns = new NamedLocaleInfoScriptlet (l);
+ ns.registerSelf();
+ }
+ }
+
+ public NamedLocaleInfoScriptlet (Locale namedlocale)
+ {
+ super ();
+
+ // The namedLocale is an instance returned from LocaleList.getSupportedLocales()
+ // getSupportedLocales() is derived from Locale.getAvailableLocales()
+ // which accounts for <Country, Language> but not the Oracle variant. Use
+ // similar code to getLibraryName() to set the Locale variant.
+ // See JSLocaleElementsGenerator.java in maven-i18n-plugin to check
+ // how LocaleList.java is generated
+ String var = getSupportedLocaleVariant(RenderingContext.getCurrentInstance());
+ if (var != null)
+ {
+ namedlocale = new Locale(namedlocale.getLanguage(),
+ namedlocale.getCountry(),
+ var);
+ }
+
+ _locale = namedlocale;
+ }
+
+
+ /*
+ * Append an argument to the URL to indicate if this is the page locale
+ */
+ protected String getLibraryURL(
+ FacesContext context,
+ RenderingContext arc)
+ {
+ StringBuffer sb = new StringBuffer (super.getLibraryURL(context, arc));
+ if (!(_locale.equals(arc.getLocaleContext().getFormattingLocale())))
+ {
+ sb.append("?skipTranslations=true");
+ }
+ return sb.toString();
+ }
+
+ /* Register as a distinct scriptlet for each locale, i.e. <country, language, Oraclevariant> */
+ @Override
+ public Object getScriptletKey()
+ {
+ String lib = (String) super.getScriptletKey();
+ String sLoc = _locale.toString();
+
+ StringBuffer sb = new StringBuffer (lib.length() + 1 + sLoc.length());
+ sb.append (lib);
+ sb.append ("_");
+ sb.append (sLoc);
+ return sb.toString();
+ }
+
+ protected Locale getFormattingLocale(RenderingContext arc)
+ {
+ return _locale;
+ }
+
+ private Locale _locale;
+}
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/XhtmlScriptletFactory.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/XhtmlScriptletFactory.java?rev=595495&r1=595494&r2=595495&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/XhtmlScriptletFactory.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/jsLibs/XhtmlScriptletFactory.java Thu Nov 15 15:56:42 2007
@@ -72,6 +72,7 @@
_sDateFieldScriptlet.registerSelf();
_sPollScriptlet.registerSelf();
LocaleInfoScriptlet.sharedInstance().registerSelf();
+ NamedLocaleInfoScriptlet.registerNamedLocales();
ColorFormatInfoScriptlet.sharedInstance().registerSelf();
DateFormatInfoScriptlet.sharedInstance().registerSelf();
DefaultTimeZoneScriptlet.sharedInstance().registerSelf();
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/resource/TrTranslationsResourceLoader.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/resource/TrTranslationsResourceLoader.java?rev=595495&r1=595494&r2=595495&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/resource/TrTranslationsResourceLoader.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/resource/TrTranslationsResourceLoader.java Thu Nov 15 15:56:42 2007
@@ -18,10 +18,15 @@
*/
package org.apache.myfaces.trinidadinternal.resource;
+import java.io.IOException;
+
+import java.util.Map;
+
import javax.faces.context.FacesContext;
import org.apache.myfaces.trinidad.skin.Skin;
+
public class TrTranslationsResourceLoader extends TranslationsResourceLoader
{
/**
@@ -66,5 +71,28 @@
protected Skin getSkin(FacesContext context)
{
return null;
+ }
+
+ /*
+ * Override to return empty content when loading translations for
+ * something other than the page locale. This can happen if components
+ * on the page have a different locale than the page.
+ */
+ @Override
+ protected String getString(String path) throws IOException
+ {
+ FacesContext context = FacesContext.getCurrentInstance();
+ Map params = context.getExternalContext().getRequestParameterMap();
+
+ boolean skipTranslations = "true".equals(params.get("skipTranslations"));
+ if (skipTranslations)
+ {
+ return "";
+ }
+ else
+ {
+ return (super.getString (path));
+ }
+
}
}
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/DateFieldFormat.js
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/DateFieldFormat.js?rev=595495&r1=595494&r2=595495&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/DateFieldFormat.js (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/DateFieldFormat.js Thu Nov 15 15:56:42 2007
@@ -22,8 +22,12 @@
if (name && _dfs)
{
var format = _dfs[name];
- if (format)
- return new TrDateTimeConverter(format);
+ if (_dl)
+ {
+ var locale = _dl[name];
+ return new TrDateTimeConverter (format, locale);
+ }
+ return new TrDateTimeConverter(format);
}
return new TrDateTimeConverter();
@@ -47,4 +51,5 @@
}
}
}
+