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/20 23:29:15 UTC
cvs commit: jakarta-tapestry/src/documentation/content/xdocs links.ent
hlship 2005/06/20 14:29:15
Modified: . status.xml
framework/src/java/org/apache/tapestry/form TextField.jwc
TextArea.jwc DatePicker.jwc
framework/src/java/org/apache/tapestry/form/translator
TranslatorBindingFactory.java
framework/src/descriptor/META-INF
tapestry.form.validator.xml
framework/src/java/org/apache/tapestry/form/validator
ValidatorContribution.java
src/documentation/content/xdocs/UsersGuide bindings.xml
examples/Workbench/src/context/WEB-INF Fields.page
examples/Workbench/src/context/css workbench.css
src/documentation/content/xdocs links.ent
Added: framework/src/java/org/apache/tapestry/form/validator
ValidatorsBinding.java
ValidatorsBindingFactory.java
framework/src/test/org/apache/tapestry/form/validator
TestValidatorsBinding.java
Log:
Add validators: binding prefix, which allows validators to be specified as a succinct list.
Revision Changes Path
1.139 +2 -0 jakarta-tapestry/status.xml
Index: status.xml
===================================================================
RCS file: /home/cvs/jakarta-tapestry/status.xml,v
retrieving revision 1.138
retrieving revision 1.139
diff -u -r1.138 -r1.139
--- status.xml 19 Jun 2005 16:21:15 -0000 1.138
+++ status.xml 20 Jun 2005 21:29:15 -0000 1.139
@@ -87,6 +87,8 @@
<action type="add" dev="HLS">Listener methods may now return a page name, or a page instance, to activate and render the response.</action>
<action type="add" dev="HLS">Add injection of pages.</action>
<action type="add" dev="HLS">Add InjectPage annotation.</action>
+ <action type="add" dev="HLS">Add validators: binding prefix, which allows validators to be
+ specified as a succinct list.</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.10 +1 -1 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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- TextField.jwc 18 Jun 2005 18:09:13 -0000 1.9
+++ TextField.jwc 20 Jun 2005 21:29:15 -0000 1.10
@@ -53,7 +53,7 @@
</parameter>
<parameter name="translator" default-binding="translator" default-value="string"/>
- <parameter name="validators" default-binding="ognl"/>
+ <parameter name="validators" default-binding="validators"/>
<reserved-parameter name="name"/>
<reserved-parameter name="type"/>
1.10 +1 -1 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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- TextArea.jwc 18 Jun 2005 18:09:13 -0000 1.9
+++ TextArea.jwc 20 Jun 2005 21:29:15 -0000 1.10
@@ -45,7 +45,7 @@
</parameter>
<parameter name="translator" default-binding="translator" default-value="string"/>
- <parameter name="validators" default-binding="ognl"/>
+ <parameter name="validators" default-binding="validators"/>
<reserved-parameter name="name"/>
1.12 +1 -1 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.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- DatePicker.jwc 18 Jun 2005 18:09:13 -0000 1.11
+++ DatePicker.jwc 20 Jun 2005 21:29:15 -0000 1.12
@@ -29,7 +29,7 @@
<parameter name="displayName" default-binding="literal"/>
<parameter name="translator" default-binding="translator" default-value="date,pattern=dd MMM yyyy"/>
- <parameter name="validators" default-binding="ognl"/>
+ <parameter name="validators" default-binding="validators"/>
<asset name="defaultIcon" path="DatePickerIcon.png"/>
1.2 +4 -11 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/TranslatorBindingFactory.java
Index: TranslatorBindingFactory.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/TranslatorBindingFactory.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TranslatorBindingFactory.java 16 Jun 2005 20:57:10 -0000 1.1
+++ TranslatorBindingFactory.java 20 Jun 2005 21:29:15 -0000 1.2
@@ -19,8 +19,7 @@
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;
+import org.apache.tapestry.binding.AbstractBindingFactory;
/**
* Uses the tapestry.form.translator.TranslatorBeanFactory service to obtain configured
@@ -30,12 +29,10 @@
* @author Howard Lewis Ship
* @since 4.0
*/
-public class TranslatorBindingFactory implements BindingFactory
+public class TranslatorBindingFactory extends AbstractBindingFactory
{
private BeanFactory _translatorBeanFactory;
- private ValueConverter _valueConverter;
-
public IBinding createBinding(IComponent root, String bindingDescription, String path,
Location location)
{
@@ -43,7 +40,8 @@
{
Translator translator = (Translator) _translatorBeanFactory.get(path);
- return new TranslatorBinding(bindingDescription, _valueConverter, location, translator);
+ return new TranslatorBinding(bindingDescription, getValueConverter(), location,
+ translator);
}
catch (Exception ex)
{
@@ -55,9 +53,4 @@
{
_translatorBeanFactory = translatorBeanFactory;
}
-
- public void setValueConverter(ValueConverter valueConverter)
- {
- _valueConverter = valueConverter;
- }
}
1.2 +37 -0 jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.form.validator.xml
Index: tapestry.form.validator.xml
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.form.validator.xml,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- tapestry.form.validator.xml 20 Jun 2005 20:20:08 -0000 1.1
+++ tapestry.form.validator.xml 20 Jun 2005 21:29:15 -0000 1.2
@@ -39,5 +39,42 @@
</schema>
</configuration-point>
+
+ <contribution configuration-id="Validators">
+ <validator name="email" configurable="false" class="Email"/>
+ <validator name="required" configurable="false" class="Required"/>
+ <validator name="max" class="Max"/>
+ <validator name="maxDate" class="MaxDate"/>
+ <validator name="maxLength" class="MaxLength"/>
+ <validator name="min" class="Min"/>
+ <validator name="minDate" class="MinDate"/>
+ <validator name="minLength" class="MinLength"/>
+ <validator name="pattern" class="Pattern"/>
+ </contribution>
+
+ <service-point id="ValidatorFactory">
+ <invoke-factory>
+ <construct class="ValidatorFactoryImpl">
+ <set-configuration property="validators" configuration-id="Validators"/>
+ </construct>
+ </invoke-factory>
+ </service-point>
+
+ <service-point id="ValidatorsBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
+
+ Factory for the "translator:" binding prefix.
+
+ <invoke-factory>
+ <construct class="ValidatorsBindingFactory">
+ <set-service property="validatorFactory" service-id="ValidatorFactory"/>
+ <set-object property="valueConverter" value="infrastructure:valueConverter"/>
+ </construct>
+ </invoke-factory>
+
+ </service-point>
+
+ <contribution configuration-id="tapestry.bindings.BindingFactories">
+ <binding prefix="validators" service-id="ValidatorsBindingFactory"/>
+ </contribution>
</module>
\ No newline at end of file
1.2 +15 -3 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/ValidatorContribution.java
Index: ValidatorContribution.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/ValidatorContribution.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ValidatorContribution.java 20 Jun 2005 20:20:08 -0000 1.1
+++ ValidatorContribution.java 20 Jun 2005 21:29:15 -0000 1.2
@@ -22,10 +22,22 @@
*/
public class ValidatorContribution
{
- private boolean _configurable;
+ private boolean _configurable = true;
+
+ private String _name;
private Class _validatorClass;
+ public String getName()
+ {
+ return _name;
+ }
+
+ public Class getValidatorClass()
+ {
+ return _validatorClass;
+ }
+
public boolean isConfigurable()
{
return _configurable;
@@ -36,9 +48,9 @@
_configurable = configurable;
}
- public Class getValidatorClass()
+ public void setName(String name)
{
- return _validatorClass;
+ _name = name;
}
public void setValidatorClass(Class validatorClass)
1.1 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/ValidatorsBinding.java
Index: ValidatorsBinding.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.validator;
import java.util.List;
import org.apache.hivemind.Location;
import org.apache.hivemind.util.Defense;
import org.apache.tapestry.binding.AbstractBinding;
import org.apache.tapestry.coerce.ValueConverter;
/**
* Binding used to hold a list of {@link org.apache.tapestry.form.validator.Validator}s.
*
* @author Howard Lewis Ship
* @since 4.0
*/
public class ValidatorsBinding extends AbstractBinding
{
private final List _validators;
public ValidatorsBinding(String description, ValueConverter valueConverter, Location location,
List validators)
{
super(description, valueConverter, location);
Defense.notNull(validators, "validator");
_validators = validators;
}
public Object getObject()
{
return _validators;
}
}
1.1 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/ValidatorsBindingFactory.java
Index: ValidatorsBindingFactory.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.validator;
import java.util.List;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.Location;
import org.apache.tapestry.IBinding;
import org.apache.tapestry.IComponent;
import org.apache.tapestry.binding.AbstractBindingFactory;
public class ValidatorsBindingFactory extends AbstractBindingFactory
{
private ValidatorFactory _validatorFactory;
public void setValidatorFactory(ValidatorFactory validatorFactory)
{
_validatorFactory = validatorFactory;
}
public IBinding createBinding(IComponent root, String bindingDescription, String path,
Location location)
{
try
{
List validators = _validatorFactory.constructValidatorList(path);
return new ValidatorsBinding(bindingDescription, getValueConverter(), location,
validators);
}
catch (Exception ex)
{
throw new ApplicationRuntimeException(ex.getMessage(), null, location, ex);
}
}
}
1.1 jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestValidatorsBinding.java
Index: TestValidatorsBinding.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.validator;
import java.util.List;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.Location;
import org.apache.tapestry.IBinding;
import org.apache.tapestry.binding.BindingTestCase;
import org.apache.tapestry.coerce.ValueConverter;
import org.easymock.MockControl;
/**
* Tests for {@link org.apache.tapestry.form.validator.ValidatorsBinding} and
* {@link org.apache.tapestry.form.validator.ValidatorsBindingFactory}.
*
* @author Howard Lewis Ship
* @since 4.0
*/
public class TestValidatorsBinding extends BindingTestCase
{
public void testSuccess()
{
Location l = newLocation();
List validators = (List) newMock(List.class);
ValueConverter vc = newValueConverter();
MockControl control = newControl(ValidatorFactory.class);
ValidatorFactory vf = (ValidatorFactory) control.getMock();
vf.constructValidatorList("required");
control.setReturnValue(validators);
replayControls();
ValidatorsBindingFactory factory = new ValidatorsBindingFactory();
factory.setValueConverter(vc);
factory.setValidatorFactory(vf);
IBinding binding = factory.createBinding(null, "my desc", "required", l);
assertSame(validators, binding.getObject());
assertSame(l, binding.getLocation());
assertEquals("my desc", binding.getDescription());
verifyControls();
}
public void testFailure()
{
Throwable t = new RuntimeException("Boom!");
Location l = newLocation();
ValueConverter vc = newValueConverter();
MockControl control = newControl(ValidatorFactory.class);
ValidatorFactory vf = (ValidatorFactory) control.getMock();
vf.constructValidatorList("required");
control.setThrowable(t);
replayControls();
ValidatorsBindingFactory factory = new ValidatorsBindingFactory();
factory.setValueConverter(vc);
factory.setValidatorFactory(vf);
try
{
factory.createBinding(null, "my desc", "required", l);
unreachable();
}
catch (ApplicationRuntimeException ex)
{
assertEquals("Boom!", ex.getMessage());
assertSame(t, ex.getRootCause());
assertSame(l, ex.getLocation());
}
verifyControls();
}
}
1.6 +9 -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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- bindings.xml 16 Jun 2005 20:57:10 -0000 1.5
+++ bindings.xml 20 Jun 2005 21:29:15 -0000 1.6
@@ -123,15 +123,22 @@
<tr>
<td>validator</td>
- <td>Initializer used to obtain and configure an &IValidator; instance.</td>
+ <td>Initializer used to obtain and configure an &IValidator; instance (used with &ValidField;).</td>
<td>validator:string,required,minimumLength=5</td>
<td></td>
</tr>
+
+ <tr>
+ <td>validators</td>
+ <td>List of configured &Validator; instances (used with &TextField; and others). </td>
+ <td>validators:email,required,minLength=10</td>
+ <td></td>
+ </tr>
</table>
<p>
Most of these are quite straight forward; the
- <link href="validation.html#validation.validator-binding">validator and translator</link> prefixes
+ <link href="validation.html#validation.validator-binding">validator, validators and translator</link> prefixes
require some additional description.
</p>
1.13 +10 -36 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.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- Fields.page 18 Jun 2005 18:09:14 -0000 1.12
+++ Fields.page 20 Jun 2005 21:29:15 -0000 1.13
@@ -26,36 +26,10 @@
<bean name="required" class="org.apache.tapestry.form.validator.Required"/>
<bean name="delegate" class="org.apache.tapestry.workbench.WorkbenchValidationDelegate" property="delegate"/>
- <bean name="dateValidator" lifecycle="render" class="org.apache.tapestry.form.validator.DateValidator">
- <set name="min" value="new java.util.Date()"/>
+ <bean name="dateValidator" lifecycle="render" class="org.apache.tapestry.form.validator.MinDate">
+ <set name="minDate" value="new java.util.Date()"/>
</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="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="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="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="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="emailValidator" lifecycle="render" class="org.apache.tapestry.form.validator.EmailValidator"></bean>
-
<component id="inputEnabled" type="Checkbox">
<binding name="selected" value="clientValidationEnabled"/>
<binding name="onchange" value="'this.form.submit()'"/>
@@ -77,46 +51,46 @@
<binding name="value" value="ognl:visit.intValue"/>
<binding name="translator" value="number,pattern=#"/>
<binding name="displayName" value="Integer Field"/>
- <binding name="validators" value="ognl:{beans.required, beans.intValidator}"/>
+ <binding name="validators" value="required,min=5,max=20"/>
</component>
<component id="inputDouble" type="TextField">
<binding name="value" value="ognl:visit.doubleValue"/>
<binding name="translator" value="number,pattern=#.#"/>
- <binding name="validators" value="ognl:{beans.required, beans.doubleValidator}"/>
+ <binding name="validators" value="required,min=3.14,max=27.5"/>
<binding name="displayName" value="Double Field"/>
</component>
<component id="inputBigDecimal" type="TextField">
<binding name="value" value="ognl:visit.bigDecimalValue"/>
<binding name="translator" value="number,pattern=#.#"/>
- <binding name="validators" value="ognl:{beans.required, beans.bigDecimalValidator}"/>
+ <binding name="validators" value="required,min=2,max=100.123456234563456734563456356734567456784567456784567845675678456785678"/>
<binding name="displayName" value="Big Decimal Field"/>
</component>
<component id="inputLong" type="TextField">
<binding name="value" value="ognl:visit.longValue"/>
<binding name="translator" value="number,pattern=#"/>
- <binding name="validators" value="ognl:{beans.required, beans.longValidator}"/>
+ <binding name="validators" value="required,min=6,max=21"/>
<binding name="displayName" value="Long Field"/>
</component>
<component id="inputString" type="TextField">
<binding name="value" value="ognl:visit.stringValue"/>
- <binding name="validators" value="ognl:{beans.required, beans.stringValidator}"/>
+ <binding name="validators" value="required,minLength=3"/>
<binding name="displayName" value="String Field"/>
</component>
<component id="inputEmail" type="TextField">
<binding name="value" value="ognl:visit.emailValue"/>
- <binding name="validators" value="ognl:{beans.required,beans.emailValidator}"/>
+ <binding name="validators" value="required,email"/>
<binding name="displayName" value="Email Field"/>
</component>
<component id="textArea" type="TextArea">
<binding name="value" value="ognl:visit.textValue"></binding>
- <binding name="validators" value="ognl:{beans.required, beans.stringValidator}"/>
- <binding name="displayName" value="Text Field"/>
+ <binding name="validators" value="required,minLength=20"/>
+ <binding name="displayName" value="Text Area"/>
</component>
<asset name="continue" path="images/Continue.gif"/>
1.3 +1 -1 jakarta-tapestry/examples/Workbench/src/context/css/workbench.css
Index: workbench.css
===================================================================
RCS file: /home/cvs/jakarta-tapestry/examples/Workbench/src/context/css/workbench.css,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- workbench.css 8 Mar 2005 22:36:40 -0000 1.2
+++ workbench.css 20 Jun 2005 21:29:15 -0000 1.3
@@ -4,7 +4,7 @@
}
-INPUT.field-error
+.field-error
{
color: White;
background-color: Red;
1.17 +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.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- links.ent 17 Jun 2005 18:04:58 -0000 1.16
+++ links.ent 20 Jun 2005 21:29:15 -0000 1.17
@@ -111,6 +111,7 @@
<!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 Validator '<link href="&apiroot;/form/validator/Validator.html">Validator</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>'>
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org