You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2005/06/16 22:57:10 UTC
cvs commit: jakarta-tapestry/framework/src/test/org/apache/tapestry/form/translator TestTranslatorBinding.java
hlship 2005/06/16 13:57:10
Modified: . status.xml
framework/src/java/org/apache/tapestry/form Form.js
TextField.jwc AbstractFormComponentContributor.java
TextArea.jwc DatePicker.jwc
ValidatableFieldSupportImpl.java
framework/src/java/org/apache/tapestry/form/translator
AbstractTranslator.java StringTranslator.java
NumberTranslator.java FormatTranslator.java
DateTranslator.java
framework/src/java/org/apache/tapestry/valid
ValidatorBinding.java
src/documentation/content/xdocs/UsersGuide bindings.xml
examples/Workbench/src/context/WEB-INF Fields.page
framework/src/descriptor/META-INF tapestry.form.xml
examples/Workbench/src/context Fields.html
src/documentation/content/xdocs links.ent
framework/src/java/org/apache/tapestry/form/validator
StringValidator.js
Added: framework/src/java/org/apache/tapestry/form/translator
TranslatorBindingFactory.java
TranslatorBinding.java
framework/src/descriptor/META-INF
tapestry.form.translator.xml
framework/src/test/org/apache/tapestry/form/translator
TestTranslatorBinding.java
Log:
Add translator binding prefix.
Revision Changes Path
1.134 +1 -0 jakarta-tapestry/status.xml
Index: status.xml
===================================================================
RCS file: /home/cvs/jakarta-tapestry/status.xml,v
retrieving revision 1.133
retrieving revision 1.134
diff -u -r1.133 -r1.134
--- status.xml 16 Jun 2005 18:27:11 -0000 1.133
+++ status.xml 16 Jun 2005 20:57:10 -0000 1.134
@@ -82,6 +82,7 @@
a failure instantiating a component class. </action>
<action type="add" dev="PF">Refactored and expanded validation functionality to include DatePicker, PropertySelection, RadioGroup, Select, TextArea, TextField, Upload, contrib:Palette, and contrib:MultiplePropertySelection.</action>
<action type="update" dev="HLS">Rework form event management to be primarily a client-side concern.</action>
+ <action type="add" dev="HLS">Add translator binding prefix.</action>
</release>
<release version="4.0-alpha-3" date="May 16 2005">
<action type="add" dev="HLS">Add initial support for the validator: binding prefix.</action>
1.4 +4 -6 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/Form.js
Index: Form.js
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/Form.js,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Form.js 16 Jun 2005 18:27:11 -0000 1.3
+++ Form.js 16 Jun 2005 20:57:10 -0000 1.4
@@ -30,12 +30,10 @@
function focus(field)
{
- field.focus();
+ field.focus();
if (field.select)
- {
field.select();
- }
}
function trim(field)
@@ -157,7 +155,7 @@
if (event.abort == false)
{
- this.form.mode.value = "cancel";
+ // this.form.mode.value = "cancel";
this.form.onsubmit = null;
this.form.submit();
}
@@ -192,7 +190,7 @@
if (event.abort)
return false;
- this.form.mode.value = "submit";
+ // this.form.mode.value = "submit";
return true;
}
@@ -228,7 +226,7 @@
if (event.abort)
return;
- this.form.mode.value = "refresh";
+ // this.form.mode.value = "refresh";
this.form.onsubmit = null;
this.form.submit();
}
1.8 +2 -4 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/TextField.jwc
Index: TextField.jwc
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/TextField.jwc,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- TextField.jwc 16 Jun 2005 09:00:43 -0000 1.7
+++ TextField.jwc 16 Jun 2005 20:57:10 -0000 1.8
@@ -24,9 +24,7 @@
<description>
A text input field.
</description>
-
- <bean name="stringTranslator" class="org.apache.tapestry.form.translator.StringTranslator"></bean>
-
+
<parameter name="value" required="yes" default-binding="ognl">
<description>
The text string to be read and updated.
@@ -56,7 +54,7 @@
<parameter name="required" default-binding="ognl"/>
<parameter name="requiredMessage" default-binding="literal"/>
- <parameter name="translator" default-binding="ognl" default-value="bean:stringTranslator"/>
+ <parameter name="translator" default-binding="translator" default-value="string"/>
<parameter name="validators" default-binding="ognl"/>
<reserved-parameter name="name"/>
1.4 +11 -0 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java
Index: AbstractFormComponentContributor.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AbstractFormComponentContributor.java 16 Jun 2005 14:46:18 -0000 1.3
+++ AbstractFormComponentContributor.java 16 Jun 2005 20:57:10 -0000 1.4
@@ -16,6 +16,7 @@
import org.apache.hivemind.Resource;
import org.apache.hivemind.util.ClasspathResource;
+import org.apache.hivemind.util.PropertyUtils;
import org.apache.tapestry.IForm;
import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IRequestCycle;
@@ -32,6 +33,16 @@
{
private String _script = defaultScript();
+ public AbstractFormComponentContributor()
+ {
+ }
+
+ // Needed until HIVEMIND-134 fix is available
+ public AbstractFormComponentContributor(String initializer)
+ {
+ PropertyUtils.configureProperties(this, initializer);
+ }
+
/**
* Defines the default JavaScript file used by this contributor
*/
1.8 +2 -4 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/TextArea.jwc
Index: TextArea.jwc
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/TextArea.jwc,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- TextArea.jwc 16 Jun 2005 09:00:43 -0000 1.7
+++ TextArea.jwc 16 Jun 2005 20:57:10 -0000 1.8
@@ -24,9 +24,7 @@
<description>
A multi-line text area.
</description>
-
- <bean name="stringTranslator" class="org.apache.tapestry.form.translator.StringTranslator"></bean>
-
+
<parameter name="value" default-binding="ognl" required="yes">
<description>
The multi-line string to be read and updated.
@@ -48,7 +46,7 @@
<parameter name="required" default-binding="ognl"/>
<parameter name="requiredMessage" default-binding="literal"/>
- <parameter name="translator" default-binding="ognl" default-value="bean:stringTranslator"/>
+ <parameter name="translator" default-binding="translator" default-value="string"/>
<parameter name="validators" default-binding="ognl"/>
<reserved-parameter name="name"/>
1.10 +1 -5 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/DatePicker.jwc
Index: DatePicker.jwc
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/DatePicker.jwc,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- DatePicker.jwc 16 Jun 2005 09:00:43 -0000 1.9
+++ DatePicker.jwc 16 Jun 2005 20:57:10 -0000 1.10
@@ -20,10 +20,6 @@
"http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
<component-specification class="org.apache.tapestry.form.DatePicker" allow-body="no">
-
- <bean name="translator" class="org.apache.tapestry.form.translator.DateTranslator">
- <set name="pattern" value="'dd MMM yyyy'"/>
- </bean>
<parameter name="value" required="yes" default-binding="ognl"/>
<parameter name="format" required="no" default-binding="ognl"/>
@@ -34,7 +30,7 @@
<parameter name="displayName" default-binding="literal"/>
<parameter name="required" default-binding="ognl"/>
<parameter name="requiredMessage" default-binding="literal"/>
- <parameter name="translator" default-binding="ognl" default-value="bean:translator"/>
+ <parameter name="translator" default-binding="translator" default-value="date,pattern=dd MMM yyyy"/>
<parameter name="validators" default-binding="ognl"/>
<asset name="defaultIcon" path="DatePickerIcon.png"/>
1.3 +1 -6 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/ValidatableFieldSupportImpl.java
Index: ValidatableFieldSupportImpl.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/ValidatableFieldSupportImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ValidatableFieldSupportImpl.java 16 Jun 2005 14:46:18 -0000 1.2
+++ ValidatableFieldSupportImpl.java 16 Jun 2005 20:57:10 -0000 1.3
@@ -33,12 +33,7 @@
public class ValidatableFieldSupportImpl implements ValidatableFieldSupport
{
private ValueConverter _converter;
-
- public ValueConverter getValueConverter()
- {
- return _converter;
- }
-
+
public void setValueConverter(ValueConverter converter)
{
_converter = converter;
1.3 +42 -24 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java
Index: AbstractTranslator.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- AbstractTranslator.java 16 Jun 2005 14:46:18 -0000 1.2
+++ AbstractTranslator.java 16 Jun 2005 20:57:10 -0000 1.3
@@ -27,90 +27,108 @@
import org.apache.tapestry.valid.ValidatorException;
/**
- * Abstract {@link Translator} implementation that provides default behavior for
- * trimming, null object, and empty text handling.
+ * Abstract {@link Translator} implementation that provides default behavior for trimming, null
+ * object, and empty text handling.
*
* @author Paul Ferraro
* @since 4.0
*/
-public abstract class AbstractTranslator extends AbstractFormComponentContributor implements Translator
+public abstract class AbstractTranslator extends AbstractFormComponentContributor implements
+ Translator
{
private boolean _trim;
+
private String _message;
+ public AbstractTranslator()
+ {
+ }
+
+ // Needed until HIVEMIND-134 fix is available
+ public AbstractTranslator(String initializer)
+ {
+ super(initializer);
+ }
+
/**
- * @see org.apache.tapestry.form.translator.Translator#format(org.apache.tapestry.form.IFormComponent, java.lang.Object)
+ * @see org.apache.tapestry.form.translator.Translator#format(org.apache.tapestry.form.IFormComponent,
+ * java.lang.Object)
*/
public String format(IFormComponent field, Object object)
{
return (object != null) ? formatObject(field, object) : "";
}
-
+
/**
- * @see org.apache.tapestry.form.translator.Translator#parse(org.apache.tapestry.form.IFormComponent, java.lang.String)
+ * @see org.apache.tapestry.form.translator.Translator#parse(org.apache.tapestry.form.IFormComponent,
+ * java.lang.String)
*/
public Object parse(IFormComponent field, String text) throws ValidatorException
{
String value = _trim ? text.trim() : text;
-
+
return HiveMind.isBlank(value) ? getEmpty() : parseText(field, value);
}
-
+
protected abstract String formatObject(IFormComponent field, Object object);
-
- protected abstract Object parseText(IFormComponent field, String text) throws ValidatorException;
-
+
+ protected abstract Object parseText(IFormComponent field, String text)
+ throws ValidatorException;
+
protected Object getEmpty()
{
return null;
}
-
+
protected String buildMessage(IFormComponent field, String key)
{
Locale locale = field.getPage().getLocale();
-
- String pattern = (_message == null) ? ValidationStrings.getMessagePattern(key, locale) : _message;
-
+
+ String pattern = (_message == null) ? ValidationStrings.getMessagePattern(key, locale)
+ : _message;
+
String name = field.getDisplayName();
-
+
return MessageFormat.format(pattern, getMessageParameters(locale, name));
}
protected Object[] getMessageParameters(Locale locale, String label)
{
- return new Object[] { label };
+ return new Object[]
+ { label };
}
/**
- * @see org.apache.tapestry.form.FormComponentContributor#renderContribution(org.apache.tapestry.IRequestCycle, org.apache.tapestry.form.IFormComponent)
+ * @see org.apache.tapestry.form.FormComponentContributor#renderContribution(org.apache.tapestry.IRequestCycle,
+ * org.apache.tapestry.form.IFormComponent)
*/
public void renderContribution(IMarkupWriter writer, IRequestCycle cycle, IFormComponent field)
{
super.renderContribution(writer, cycle, field);
-
+
if (_trim)
{
IForm form = field.getForm();
-
+
addSubmitHandler(form, "trim(document." + form.getName() + "." + field.getName() + ")");
}
}
-
+
public boolean isTrim()
{
return _trim;
}
-
+
public void setTrim(boolean trim)
{
_trim = trim;
}
-
+
public String getMessage()
{
return _message;
}
-
+
public void setMessage(String message)
{
_message = message;
1.3 +22 -7 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/StringTranslator.java
Index: StringTranslator.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/StringTranslator.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- StringTranslator.java 16 Jun 2005 14:46:18 -0000 1.2
+++ StringTranslator.java 16 Jun 2005 20:57:10 -0000 1.3
@@ -17,18 +17,31 @@
import org.apache.tapestry.form.IFormComponent;
/**
- * A trivial {@link Translator} implementation. By default, empty text submissions
- * are interpretted as null.
+ * A trivial {@link Translator} implementation. By default, empty text submissions are interpretted
+ * as null.
*
* @author Paul Ferraro
* @since 4.0
*/
public class StringTranslator extends AbstractTranslator
{
+
private String _empty = null;
-
+
+ public StringTranslator()
+ {
+ }
+
+ // Needed until HIVEMIND-134 fix is available
+
+ public StringTranslator(String initializer)
+ {
+ super(initializer);
+ }
+
/**
- * @see org.apache.tapestry.form.translator.AbstractTranslator#parseText(org.apache.tapestry.form.IFormComponent, java.lang.String)
+ * @see org.apache.tapestry.form.translator.AbstractTranslator#parseText(org.apache.tapestry.form.IFormComponent,
+ * java.lang.String)
*/
protected Object parseText(IFormComponent field, String text)
{
@@ -36,20 +49,22 @@
}
/**
- * @see org.apache.tapestry.form.translator.AbstractTranslator#formatObject(org.apache.tapestry.form.IFormComponent, java.lang.Object)
+ * @see org.apache.tapestry.form.translator.AbstractTranslator#formatObject(org.apache.tapestry.form.IFormComponent,
+ * java.lang.Object)
*/
protected String formatObject(IFormComponent field, Object object)
{
return object.toString();
}
-
+
public Object getEmpty()
{
return _empty;
}
-
+
public void setEmpty(String empty)
{
_empty = empty;
}
+
}
1.5 +25 -10 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
Index: NumberTranslator.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- NumberTranslator.java 16 Jun 2005 18:27:11 -0000 1.4
+++ NumberTranslator.java 16 Jun 2005 20:57:10 -0000 1.5
@@ -34,6 +34,17 @@
*/
public class NumberTranslator extends FormatTranslator
{
+
+ public NumberTranslator()
+ {
+ }
+
+ // Needed until HIVEMIND-134 fix is available
+ public NumberTranslator(String initializer)
+ {
+ super(initializer);
+ }
+
/**
* @see org.apache.tapestry.form.AbstractFormComponentContributor#defaultScript()
*/
@@ -41,7 +52,7 @@
{
return "/org/apache/tapestry/form/translator/NumberTranslator.js";
}
-
+
/**
* @see org.apache.tapestry.form.translator.FormatTranslator#defaultPattern()
*/
@@ -62,7 +73,7 @@
{
return new DecimalFormat(getPattern(), new DecimalFormatSymbols(locale));
}
-
+
/**
* @see org.apache.tapestry.form.translator.FormatTranslator#getMessageKey()
*/
@@ -70,28 +81,32 @@
{
return ValidationStrings.INVALID_NUMBER;
}
-
+
/**
- * @see org.apache.tapestry.form.translator.AbstractTranslator#getMessageParameters(java.util.Locale, java.lang.String)
+ * @see org.apache.tapestry.form.translator.AbstractTranslator#getMessageParameters(java.util.Locale,
+ * java.lang.String)
*/
protected Object[] getMessageParameters(Locale locale, String label)
{
String pattern = getDecimalFormat(locale).toLocalizedPattern();
-
- return new Object[] { label, pattern };
+
+ return new Object[]
+ { label, pattern };
}
/**
- * @see org.apache.tapestry.form.FormComponentContributor#renderContribution(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle, org.apache.tapestry.form.IFormComponent)
+ * @see org.apache.tapestry.form.FormComponentContributor#renderContribution(org.apache.tapestry.IMarkupWriter,
+ * org.apache.tapestry.IRequestCycle, org.apache.tapestry.form.IFormComponent)
*/
public void renderContribution(IMarkupWriter writer, IRequestCycle cycle, IFormComponent field)
{
super.renderContribution(writer, cycle, field);
-
+
String message = buildMessage(field, getMessageKey());
IForm form = field.getForm();
-
- addSubmitHandler(form, "validate_number(event, document." + form.getName() + "." + field.getName() + ",'" + message + "')");
+
+ addSubmitHandler(form, "validate_number(event, document." + form.getName() + "."
+ + field.getName() + ",'" + message + "')");
}
/**
1.4 +10 -0 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java
Index: FormatTranslator.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FormatTranslator.java 16 Jun 2005 18:27:11 -0000 1.3
+++ FormatTranslator.java 16 Jun 2005 20:57:10 -0000 1.4
@@ -81,4 +81,14 @@
{
_pattern = pattern;
}
+
+ public FormatTranslator()
+ {
+ }
+
+ // Needed until HIVEMIND-134 fix is available
+ public FormatTranslator(String initializer)
+ {
+ super(initializer);
+ }
}
1.3 +18 -5 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java
Index: DateTranslator.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DateTranslator.java 16 Jun 2005 14:46:18 -0000 1.2
+++ DateTranslator.java 16 Jun 2005 20:57:10 -0000 1.3
@@ -30,6 +30,17 @@
*/
public class DateTranslator extends FormatTranslator
{
+
+ public DateTranslator()
+ {
+ }
+
+ // Needed until HIVEMIND-134 fix is available
+ public DateTranslator(String initializer)
+ {
+ super(initializer);
+ }
+
/**
* @see org.apache.tapestry.form.translator.FormatTranslator#defaultPattern()
*/
@@ -58,17 +69,19 @@
{
return ValidationStrings.INVALID_DATE;
}
-
+
/**
- * @see org.apache.tapestry.form.translator.AbstractTranslator#getMessageParameters(java.util.Locale, java.lang.String)
+ * @see org.apache.tapestry.form.translator.AbstractTranslator#getMessageParameters(java.util.Locale,
+ * java.lang.String)
*/
protected Object[] getMessageParameters(Locale locale, String label)
{
String pattern = getDateFormat(locale).toLocalizedPattern().toUpperCase(locale);
-
- return new Object[] { label, pattern };
+
+ return new Object[]
+ { label, pattern };
}
-
+
/**
* @see org.apache.tapestry.form.translator.FormatTranslator#getConstraint()
*/
1.1 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/TranslatorBindingFactory.java
Index: TranslatorBindingFactory.java
===================================================================
// Copyright 2005 The Apache Software Foundation
//
// Licensed 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.tapestry.form.translator;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.Location;
import org.apache.hivemind.lib.BeanFactory;
import org.apache.tapestry.IBinding;
import org.apache.tapestry.IComponent;
import org.apache.tapestry.binding.BindingFactory;
import org.apache.tapestry.coerce.ValueConverter;
/**
* Uses the tapestry.form.translator.TranslatorBeanFactory service to obtain configured
* {@link org.apache.tapestry.form.translator.Translator} instances that are then wrapped as
* {@link org.apache.tapestry.form.translator.TranslatorBinding}s.
*
* @author Howard Lewis Ship
* @since 4.0
*/
public class TranslatorBindingFactory implements BindingFactory
{
private BeanFactory _translatorBeanFactory;
private ValueConverter _valueConverter;
public IBinding createBinding(IComponent root, String bindingDescription, String path,
Location location)
{
try
{
Translator translator = (Translator) _translatorBeanFactory.get(path);
return new TranslatorBinding(bindingDescription, _valueConverter, location, translator);
}
catch (Exception ex)
{
throw new ApplicationRuntimeException(ex.getMessage(), location, ex);
}
}
public void setTranslatorBeanFactory(BeanFactory translatorBeanFactory)
{
_translatorBeanFactory = translatorBeanFactory;
}
public void setValueConverter(ValueConverter valueConverter)
{
_valueConverter = valueConverter;
}
}
1.1 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/TranslatorBinding.java
Index: TranslatorBinding.java
===================================================================
// Copyright 2005 The Apache Software Foundation
//
// Licensed 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.tapestry.form.translator;
import org.apache.hivemind.Location;
import org.apache.hivemind.util.Defense;
import org.apache.tapestry.binding.AbstractBinding;
import org.apache.tapestry.coerce.ValueConverter;
import org.apache.tapestry.valid.IValidator;
/**
* Implementation of {@link org.apache.tapestry.IBinding} that wraps around a
* {@link org.apache.tapestry.form.translator.Translator}.
*
* @author Howard Lewis Ship
* @since 4.0
*/
public class TranslatorBinding extends AbstractBinding
{
private final Translator _translator;
public TranslatorBinding(String description, ValueConverter valueConverter, Location location,
Translator translator)
{
super(description, valueConverter, location);
Defense.notNull(translator, "translator");
_translator = translator;
}
/**
* Returns the translator.
*/
public Object getObject()
{
return _translator;
}
}
1.2 +2 -2 jakarta-tapestry/framework/src/java/org/apache/tapestry/valid/ValidatorBinding.java
Index: ValidatorBinding.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/valid/ValidatorBinding.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ValidatorBinding.java 6 May 2005 17:29:10 -0000 1.1
+++ ValidatorBinding.java 16 Jun 2005 20:57:10 -0000 1.2
@@ -20,7 +20,7 @@
import org.apache.tapestry.coerce.ValueConverter;
/**
- * Implementation of {@link IBinding}that provides {@link org.apache.tapestry.valid.IValidator}
+ * Implementation of {@link IBinding} that provides {@link org.apache.tapestry.valid.IValidator}
* instances based on a validator bean descriptor. The descriptor is of the form
* "type[,properties]". The types are values such as "string", "date" or "number" defined in the
* tapestry.valid.Validators configuration point. The properties are a properties initialization
@@ -33,7 +33,7 @@
*/
public class ValidatorBinding extends AbstractBinding
{
- private IValidator _validator;
+ private final IValidator _validator;
public ValidatorBinding(String description, ValueConverter valueConverter, Location location,
IValidator validator)
1.5 +35 -2 jakarta-tapestry/src/documentation/content/xdocs/UsersGuide/bindings.xml
Index: bindings.xml
===================================================================
RCS file: /home/cvs/jakarta-tapestry/src/documentation/content/xdocs/UsersGuide/bindings.xml,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- bindings.xml 6 May 2005 17:29:10 -0000 1.4
+++ bindings.xml 16 Jun 2005 20:57:10 -0000 1.5
@@ -115,6 +115,13 @@
</tr>
<tr>
+ <td>translator</td>
+ <td>Initializer used to obtain and configure a &Translator; instance.</td>
+ <td>translator:number,pattern=#</td>
+ <td></td>
+ </tr>
+
+ <tr>
<td>validator</td>
<td>Initializer used to obtain and configure an &IValidator; instance.</td>
<td>validator:string,required,minimumLength=5</td>
@@ -123,13 +130,39 @@
</table>
<p>
- Most of these are quite straight forward; the <link href="validation.html#validation.validator-binding">validator:</link> prefix
- requires some additional description.
+ Most of these are quite straight forward; the
+ <link href="validation.html#validation.validator-binding">validator and translator</link> prefixes
+ require some additional description.
</p>
<note>
You can define your own prefixes by contributing into the tapestry.bindings.BindingFactories configuration point.
</note>
+
+<p>
+ Many of the bindings are driven by a HiveMind configuration; the configuration will
+ define the available values, and contributing the configuration allows
+ new values to be defined.
+</p>
+
+<table>
+ <tr>
+ <th>Binding Prefix</th>
+ <th>Configuration</th>
+ </tr>
+ <tr>
+ <td>translator</td>
+ <td><link href="&hivedoc;/config/tapestry.form.translator.Translators.html">tapestry.form.translator.Translators</link></td>
+ </tr>
+ <tr>
+ <td>state</td>
+ <td><link href="&hivedoc;/config/tapestry.state.ApplicationObjects.html">tapestry.state.ApplicationObjects</link></td>
+ </tr>
+ <tr>
+ <td>validator</td>
+ <td><link href="&hivedoc;/config/tapestry.valid.Validators.html">tapestry.valid.Validators</link></td>
+ </tr>
+</table>
<section id="bindings.default-binding-type">
1.11 +5 -78 jakarta-tapestry/examples/Workbench/src/context/WEB-INF/Fields.page
Index: Fields.page
===================================================================
RCS file: /home/cvs/jakarta-tapestry/examples/Workbench/src/context/WEB-INF/Fields.page,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- Fields.page 16 Jun 2005 09:00:43 -0000 1.10
+++ Fields.page 16 Jun 2005 20:57:10 -0000 1.11
@@ -25,97 +25,36 @@
<bean name="delegate" class="org.apache.tapestry.workbench.WorkbenchValidationDelegate" property="delegate"/>
- <bean name="dateTranslator" lifecycle="render" class="org.apache.tapestry.form.translator.DateTranslator">
- <set name="pattern" value="'MM-dd-yyyy'"/>
- </bean>
-
<bean name="dateValidator" lifecycle="render" class="org.apache.tapestry.form.validator.DateValidator">
<set name="min" value="new java.util.Date()"/>
</bean>
- <!--bean name="dateValidator" lifecycle="render" class="org.apache.tapestry.valid.DateValidator">
- <set name="required" value="true"/>
- <set name="clientScriptingEnabled" value="ognl:clientValidationEnabled"/>
- </bean-->
-
- <bean name="intTranslator" lifecycle="render" class="org.apache.tapestry.form.translator.NumberTranslator">
- <set name="pattern" value="'#'"/>
- </bean>
-
<bean name="intValidator" lifecycle="render" class="org.apache.tapestry.form.validator.NumberValidator">
<set name="min" value="@org.apache.tapestry.workbench.fields.Fields@INT_MIN"/>
<set name="max" value="@org.apache.tapestry.workbench.fields.Fields@INT_MAX"/>
</bean>
- <!--bean name="intValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
- <set name="required" value="true"/>
- <set name="minimum" value="ognl:@org.apache.tapestry.workbench.fields.Fields@INT_MIN"/>
- <set name="maximum" value="ognl:@org.apache.tapestry.workbench.fields.Fields@INT_MAX"/>
- <set name="clientScriptingEnabled" value="ognl:clientValidationEnabled"/>
- <set name="valueType" value="int"/>
- </bean-->
-
- <bean name="decimalTranslator" lifecycle="render" class="org.apache.tapestry.form.translator.NumberTranslator">
- <set name="pattern" value="'#.#'"/>
- </bean>
-
<bean name="doubleValidator" lifecycle="render" class="org.apache.tapestry.form.validator.NumberValidator">
<set name="min" value="@org.apache.tapestry.workbench.fields.Fields@DOUBLE_MIN"/>
<set name="max" value="@org.apache.tapestry.workbench.fields.Fields@DOUBLE_MAX"/>
</bean>
-
- <!--bean name="doubleValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
- <set name="required" value="true"/>
- <set name="minimum" value="ognl:@org.apache.tapestry.workbench.fields.Fields@DOUBLE_MIN"/>
- <set name="maximum" value="ognl:@org.apache.tapestry.workbench.fields.Fields@DOUBLE_MAX"/>
- <set name="clientScriptingEnabled" value="ognl:clientValidationEnabled"/>
- <set name="valueType" value="double"/>
- </bean-->
<bean name="bigDecimalValidator" lifecycle="render" class="org.apache.tapestry.form.validator.NumberValidator">
<set name="min" value="@org.apache.tapestry.workbench.fields.Fields@DECIMAL_MIN"/>
<set name="max" value="@org.apache.tapestry.workbench.fields.Fields@DECIMAL_MAX"/>
</bean>
- <!--bean name="bigDecimalValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
- <set name="required" value="true"/>
- <set name="minimum" value="@org.apache.tapestry.workbench.fields.Fields@DECIMAL_MIN"/>
- <set name="maximum" value="@org.apache.tapestry.workbench.fields.Fields@DECIMAL_MAX"/>
- <set name="clientScriptingEnabled" value="clientValidationEnabled"/>
- <set name="valueType" value="java.math.BigDecimal"/>
- </bean-->
-
<bean name="longValidator" lifecycle="render" class="org.apache.tapestry.form.validator.NumberValidator">
<set name="min" value="@org.apache.tapestry.workbench.fields.Fields@LONG_MIN"/>
<set name="max" value="@org.apache.tapestry.workbench.fields.Fields@LONG_MAX"/>
</bean>
- <!--bean name="longValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
- <set name="required" value="true"/>
- <set name="minimum" value="ognl:@org.apache.tapestry.workbench.fields.Fields@LONG_MIN"/>
- <set name="maximum" value="ognl:@org.apache.tapestry.workbench.fields.Fields@LONG_MAX"/>
- <set name="clientScriptingEnabled" value="ognl:clientValidationEnabled"/>
- <set name="valueType" value="long"/>
- </bean-->
-
<bean name="stringValidator" lifecycle="render" class="org.apache.tapestry.form.validator.StringValidator">
<set name="minLength" value="@org.apache.tapestry.workbench.fields.Fields@STRING_MIN_LENGTH"/>
</bean>
- <!--bean name="stringValidator" lifecycle="render" class="org.apache.tapestry.valid.StringValidator">
- <set name="required" value="true"/>
- <set name="minimumLength" value="ognl:@org.apache.tapestry.workbench.fields.Fields@STRING_MIN_LENGTH"/>
- <set name="clientScriptingEnabled" value="ognl:clientValidationEnabled"/>
- </bean-->
-
<bean name="emailValidator" lifecycle="render" class="org.apache.tapestry.form.validator.EmailValidator"></bean>
- <!--bean name="emailValidator" lifecycle="render" class="org.apache.tapestry.valid.EmailValidator">
- <set name="required" value="true"/>
- <set name="minimumLength" value="6"/>
- <set name="clientScriptingEnabled" value="ognl:clientValidationEnabled"/>
- </bean-->
-
<component id="inputEnabled" type="Checkbox">
<binding name="selected" value="clientValidationEnabled"/>
<binding name="onchange" value="'this.form.submit()'"/>
@@ -127,7 +66,7 @@
<component id="inputDate" type="TextField">
<binding name="value" value="visit.dateValue"/>
- <binding name="translator" value="bean:dateTranslator"/>
+ <binding name="translator" value="date,pattern=MM-dd-yyyy"/>
<binding name="required" value="true"/>
<binding name="validators" value="bean:dateValidator"/>
<binding name="displayName" value="Date Field"/>
@@ -141,7 +80,7 @@
<component id="inputInt" type="TextField">
<binding name="value" value="ognl:visit.intValue"/>
- <binding name="translator" value="bean:intTranslator"/>
+ <binding name="translator" value="number,pattern=#"/>
<binding name="required" value="true"/>
<binding name="displayName" value="Integer Field"/>
<binding name="validators" value="bean:intValidator"/>
@@ -155,35 +94,23 @@
<component id="inputDouble" type="TextField">
<binding name="value" value="ognl:visit.doubleValue"/>
- <binding name="translator" value="bean:decimalTranslator"/>
+ <binding name="translator" value="number,pattern=#.#"/>
<binding name="required" value="true"/>
<binding name="validators" value="bean:doubleValidator"/>
<binding name="displayName" value="Double Field"/>
</component>
- <!--component id="inputDouble" type="ValidField">
- <binding name="validator" value="bean:doubleValidator"/>
- <binding name="value" value="visit.doubleValue"/>
- <binding name="displayName" value="Double Field"/>
- </component-->
-
<component id="inputBigDecimal" type="TextField">
<binding name="value" value="ognl:visit.bigDecimalValue"/>
- <binding name="translator" value="bean:decimalTranslator"/>
+ <binding name="translator" value="number,pattern=#.#"/>
<binding name="required" value="true"/>
<binding name="validators" value="bean:bigDecimalValidator"/>
<binding name="displayName" value="Big Decimal Field"/>
</component>
- <!--component id="inputBigDecimal" type="ValidField">
- <binding name="value" value="visit.bigDecimalValue"/>
- <binding name="validator" value="bean:bigDecimalValidator"/>
- <binding name="displayName" value="Big Decimal Field"/>
- </component-->
-
<component id="inputLong" type="TextField">
<binding name="value" value="ognl:visit.longValue"/>
- <binding name="translator" value="bean:intTranslator"/>
+ <binding name="translator" value="number,pattern=#"/>
<binding name="required" value="true"/>
<binding name="validators" value="bean:longValidator"/>
<binding name="displayName" value="Long Field"/>
1.2 +4 -2 jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.form.xml
Index: tapestry.form.xml
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.form.xml,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- tapestry.form.xml 14 Jun 2005 00:30:01 -0000 1.1
+++ tapestry.form.xml 16 Jun 2005 20:57:10 -0000 1.2
@@ -17,11 +17,13 @@
<module id="tapestry.form" version="4.0.0" package="org.apache.tapestry.form">
+ <sub-module descriptor="tapestry.form.translator.xml"/>
+
Support for form components.
<service-point id="RequirableFieldSupport" interface="org.apache.tapestry.form.RequirableFieldSupport">
<invoke-factory>
- <construct class="RequirableFieldSupportImpl"></construct>
+ <construct class="RequirableFieldSupportImpl"/>
</invoke-factory>
</service-point>
@@ -32,5 +34,5 @@
</construct>
</invoke-factory>
</service-point>
-
+
</module>
\ No newline at end of file
1.1 jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.form.translator.xml
Index: tapestry.form.translator.xml
===================================================================
<?xml version="1.0"?>
<!--
Copyright 2005 The Apache Software Foundation
Licensed 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.
-->
<module id="tapestry.form.translator" version="4.0.0" package="org.apache.tapestry.form.translator">
Support for input field translators.
<configuration-point id="Translators" schema-id="hivemind.lib.BeanFactoryContribution">
Defines the available translators that can be used to validate user input on fields.
</configuration-point>
<contribution configuration-id="Translators">
<bean name="date" class="DateTranslator"/>
<bean name="number" class="NumberTranslator"/>
<bean name="string" class="StringTranslator"/>
</contribution>
<service-point id="TranslatorBeanFactory" interface="org.apache.hivemind.lib.BeanFactory">
<invoke-factory service-id="hivemind.lib.BeanFactoryBuilder">
<factory vend-class="Translator" configuration-id="Translators"/>
</invoke-factory>
</service-point>
<service-point id="TranslatorBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
Factory for the "translator:" binding prefix.
<invoke-factory>
<construct class="TranslatorBindingFactory">
<set-service property="translatorBeanFactory" service-id="TranslatorBeanFactory"/>
<set-object property="valueConverter" value="infrastructure:valueConverter"/>
</construct>
</invoke-factory>
</service-point>
<contribution configuration-id="tapestry.bindings.BindingFactories">
<binding prefix="translator" service-id="TranslatorBindingFactory"/>
</contribution>
</module>
1.8 +3 -8 jakarta-tapestry/examples/Workbench/src/context/Fields.html
Index: Fields.html
===================================================================
RCS file: /home/cvs/jakarta-tapestry/examples/Workbench/src/context/Fields.html,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Fields.html 16 Jun 2005 09:00:43 -0000 1.7
+++ Fields.html 16 Jun 2005 20:57:10 -0000 1.8
@@ -6,16 +6,11 @@
code to directly read HTTP parameters.
<p>
-In addition, Tapestry includes the ValidField component which
-is part of a framework that allows for complex validation of user input
-as well as presentation of errors.
-
-<p>
<form jwcid="valid@Form">
<input jwcid="inputEnabled"/> Enable Client Side Validation
</form>
-<p>ValidField components can perform validations on the client-side, triggered
+<p>Input field components can perform validations on the client-side, triggered
by the user submitting the form. The checkbox above enables or disables
this feature. Input is always rechecked on the server-side (in case the client
doesn't support JavaScript).
@@ -63,14 +58,14 @@
<tr>
<td></td>
- <td><input jwcid="@ImageSubmit" image="continue"/></td>
+ <td><input jwcid="continue@ImageSubmit" image="continue"/></td>
</tr>
<tr>
<td></td>
<td>
Or, use a LinkSubmit component:
- <a jwcid="@LinkSubmit">Continue</a>
+ <a jwcid="continueLink@LinkSubmit">Continue</a>
</td>
</tr>
1.15 +1 -0 jakarta-tapestry/src/documentation/content/xdocs/links.ent
Index: links.ent
===================================================================
RCS file: /home/cvs/jakarta-tapestry/src/documentation/content/xdocs/links.ent,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- links.ent 1 Jun 2005 14:25:55 -0000 1.14
+++ links.ent 16 Jun 2005 20:57:10 -0000 1.15
@@ -110,6 +110,7 @@
<!ENTITY StaleLinkException '<link href="&apiroot;/StaleLinkException.html">StaleLinkException</link>'>
<!ENTITY StateObjectFactory '<link href="&apiroot;/engine/state/StateObjectFactory.html">StateObjectFactory</link>'>
<!ENTITY Tapestry '<link href="&apiroot;/Tapestry.html">Tapestry</link>'>
+<!ENTITY Translator '<link href="&apiroot;/form/translator/Translator.html">Translator</link>'>
<!ENTITY ValidationDelegate '<link href="&apiroot;/valid/ValidationDelegate.html">ValidationDelegate</link>'>
<!ENTITY WebRequest '<link href="&apiroot;/web/WebRequest.html">WebRequest</link>'>
<!ENTITY WebResponse '<link href="&apiroot;/web/WebResponse.html">WebResponse</link>'>
1.3 +2 -2 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/StringValidator.js
Index: StringValidator.js
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/StringValidator.js,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- StringValidator.js 16 Jun 2005 18:27:11 -0000 1.2
+++ StringValidator.js 16 Jun 2005 20:57:10 -0000 1.3
@@ -15,11 +15,11 @@
function validate_min_length(event, field, min, message)
{
if (field.value.length < min)
- handle_invalid_field(field, message)
+ handle_invalid_field(event, field, message)
}
function validate_max_length(event, field, max, message)
{
if (field.value.length > max)
- handle_invalid_field(field, message)
+ handle_invalid_field(event, field, message)
}
1.1 jakarta-tapestry/framework/src/test/org/apache/tapestry/form/translator/TestTranslatorBinding.java
Index: TestTranslatorBinding.java
===================================================================
// Copyright 2005 The Apache Software Foundation
//
// Licensed 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.tapestry.form.translator;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.Location;
import org.apache.hivemind.lib.BeanFactory;
import org.apache.tapestry.IBinding;
import org.apache.tapestry.IComponent;
import org.apache.tapestry.binding.BindingTestCase;
import org.apache.tapestry.coerce.ValueConverter;
import org.easymock.MockControl;
/**
* Tests for {@link org.apache.tapestry.form.translator.TranslatorBinding} and
* {@link org.apache.tapestry.form.translator.TranslatorBindingFactory}.
*
* @author Howard Lewis Ship
* @since 4.0
*/
public class TestTranslatorBinding extends BindingTestCase
{
public void testCreate()
{
Location l = newLocation();
ValueConverter vc = newValueConverter();
IComponent component = newComponent();
MockControl bfc = newControl(BeanFactory.class);
BeanFactory bf = (BeanFactory) bfc.getMock();
Translator translator = (Translator) newMock(Translator.class);
bf.get("string");
bfc.setReturnValue(translator);
replayControls();
TranslatorBindingFactory f = new TranslatorBindingFactory();
f.setValueConverter(vc);
f.setTranslatorBeanFactory(bf);
IBinding binding = f.createBinding(component, "description", "string", l);
assertSame(translator, binding.getObject());
assertSame(l, binding.getLocation());
assertTrue(binding.isInvariant());
assertEquals("description", binding.getDescription());
verifyControls();
}
public void testFailure()
{
Location l = newLocation();
IComponent component = newComponent();
MockControl bfc = newControl(BeanFactory.class);
BeanFactory bf = (BeanFactory) bfc.getMock();
Throwable t = new RuntimeException("Boom!");
bf.get("string");
bfc.setThrowable(t);
replayControls();
TranslatorBindingFactory f = new TranslatorBindingFactory();
f.setTranslatorBeanFactory(bf);
try
{
f.createBinding(component, "description", "string", l);
unreachable();
}
catch (ApplicationRuntimeException ex)
{
assertEquals("Boom!", ex.getMessage());
assertSame(t, ex.getRootCause());
assertSame(l, ex.getLocation());
}
verifyControls();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org