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/08/30 00:38:27 UTC
svn commit: r264648 - in /jakarta/tapestry/trunk: ./
examples/Workbench/src/context/ examples/Workbench/src/context/WEB-INF/
examples/Workbench/src/java/org/apache/tapestry/workbench/
examples/Workbench/src/java/org/apache/tapestry/workbench/upload/ fr...
Author: hlship
Date: Mon Aug 29 15:38:14 2005
New Revision: 264648
URL: http://svn.apache.org/viewcvs?rev=264648&view=rev
Log:
TAPESTRY-610: $bean syntax for validators: binding prefix is broken
Added:
jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.properties
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/AbstractValidatorWrapper.java
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/BeanValidatorWrapper.java
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorWrapper.java
Modified:
jakarta/tapestry/trunk/examples/Workbench/src/context/Fields.html
jakarta/tapestry/trunk/examples/Workbench/src/context/FieldsResults.html
jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.page
jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/Visit.java
jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/upload/Upload.java
jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/ValidatorFactoryImpl.java
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorFactory.java
jakarta/tapestry/trunk/status.xml
Modified: jakarta/tapestry/trunk/examples/Workbench/src/context/Fields.html
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Workbench/src/context/Fields.html?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Workbench/src/context/Fields.html (original)
+++ jakarta/tapestry/trunk/examples/Workbench/src/context/Fields.html Mon Aug 29 15:38:14 2005
@@ -17,7 +17,7 @@
<span jwcid="showError"/>
-<form jwcid="form@Form" success="listener:formSubmit" delegate="bean:delegate" clientValidationEnabled="ognl:clientValidationEnabled">
+<form jwcid="form@Form" success="listener:doSubmit" delegate="bean:delegate" clientValidationEnabled="ognl:clientValidationEnabled">
<table class="form">
<tr>
@@ -49,6 +49,11 @@
<tr>
<th><label jwcid="@FieldLabel" accesskey="e" field="component:inputEmail"/></th>
<td><input jwcid="inputEmail"/></td>
+ </tr>
+
+ <tr>
+ <th><label jwcid="@FieldLabel" accessKey="z" field="component:zipCode"/></th>
+ <td><input jwcid="zipCode"/></td>
</tr>
<tr>
Modified: jakarta/tapestry/trunk/examples/Workbench/src/context/FieldsResults.html
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Workbench/src/context/FieldsResults.html?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Workbench/src/context/FieldsResults.html (original)
+++ jakarta/tapestry/trunk/examples/Workbench/src/context/FieldsResults.html Mon Aug 29 15:38:14 2005
@@ -37,6 +37,11 @@
<td><span jwcid="@Insert" value="ognl:visit.emailValue"/></td>
</tr>
+ <tr>
+ <th>Zip Code</th>
+ <td><span jwcid="@Insert" value="ognl:visit.zipCode"/></td>
+ </tr>
+
<tr>
<th>Text Value</th>
<td><span jwcid="@Insert" value="ognl:visit.textValue"/></td>
Modified: jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.page
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.page?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.page (original)
+++ jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.page Mon Aug 29 15:38:14 2005
@@ -87,6 +87,17 @@
<binding name="displayName" value="literal:Email Field"/>
</component>
+ <bean name="zipValidator" class="org.apache.tapestry.form.validator.Pattern">
+ <set name="pattern" value="message:zip-code-pattern"/>
+ <set name="message" value="message:zip-code-message"/>
+ </bean>
+
+ <component id="zipCode" type="TextField">
+ <binding name="value" value="visit.zipCode"/>
+ <binding name="validators" value="validators:required,$zipValidator"/>
+ <binding name="displayName" value="message:zip-code-label"/>
+ </component>
+
<component id="textArea" type="TextArea">
<binding name="value" value="visit.textValue"></binding>
<binding name="validators" value="validators:required,minLength=20"/>
Added: jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.properties
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.properties?rev=264648&view=auto
==============================================================================
--- jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.properties (added)
+++ jakarta/tapestry/trunk/examples/Workbench/src/context/WEB-INF/Fields.properties Mon Aug 29 15:38:14 2005
@@ -0,0 +1,3 @@
+zip-code-label=Zip Code
+zip-code-pattern=^\\d{5}(-\\d{4})?$
+zip-code-message=Zip codes are either five or nine digits; 02134 or 90125-1234.
\ No newline at end of file
Modified: jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/Visit.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/Visit.java?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/Visit.java (original)
+++ jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/Visit.java Mon Aug 29 15:38:14 2005
@@ -60,7 +60,9 @@
private String _emailValue;
private String _textValue;
-
+
+ private String _zipCode;
+
public String getActiveTabName()
{
return _activeTabName;
@@ -165,9 +167,19 @@
{
return _textValue;
}
-
+
public void setTextValue(String value)
{
_textValue = value;
+ }
+
+ public String getZipCode()
+ {
+ return _zipCode;
+ }
+
+ public void setZipCode(String zipCode)
+ {
+ _zipCode = zipCode;
}
}
Modified: jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/upload/Upload.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/upload/Upload.java?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/upload/Upload.java (original)
+++ jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/upload/Upload.java Mon Aug 29 15:38:14 2005
@@ -14,7 +14,6 @@
package org.apache.tapestry.workbench.upload;
-import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.annotations.InjectPage;
import org.apache.tapestry.form.IPropertySelectionModel;
import org.apache.tapestry.form.StringPropertySelectionModel;
Modified: jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml (original)
+++ jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml Mon Aug 29 15:38:14 2005
@@ -2,7 +2,7 @@
<!--
Copyright 2004, 2005 The Apache Software Foundation
- Licensed under the Apache License, Versions 2.0 (the "License");
+ 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
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/AbstractValidatorWrapper.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/AbstractValidatorWrapper.java?rev=264648&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/AbstractValidatorWrapper.java (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/AbstractValidatorWrapper.java Mon Aug 29 15:38:14 2005
@@ -0,0 +1,57 @@
+// 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 org.apache.tapestry.IMarkupWriter;
+import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.form.FormComponentContributorContext;
+import org.apache.tapestry.form.IFormComponent;
+import org.apache.tapestry.form.ValidationMessages;
+import org.apache.tapestry.valid.ValidatorException;
+
+/**
+ * Abstract implementation of {@link org.apache.tapestry.form.validator.Validator} that delegates to
+ * some other object.
+ *
+ * @author Howard Lewis Ship
+ * @since 4.0
+ */
+public abstract class AbstractValidatorWrapper implements Validator
+{
+ protected abstract Validator getDelegate();
+
+ public void validate(IFormComponent field, ValidationMessages messages, Object object)
+ throws ValidatorException
+ {
+ getDelegate().validate(field, messages, object);
+ }
+
+ public boolean getAcceptsNull()
+ {
+ return getDelegate().getAcceptsNull();
+ }
+
+ public boolean isRequired()
+ {
+ return getDelegate().isRequired();
+ }
+
+ public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
+ FormComponentContributorContext context, IFormComponent field)
+ {
+ getDelegate().renderContribution(writer, cycle, context, field);
+ }
+
+}
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/BeanValidatorWrapper.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/BeanValidatorWrapper.java?rev=264648&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/BeanValidatorWrapper.java (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/BeanValidatorWrapper.java Mon Aug 29 15:38:14 2005
@@ -0,0 +1,54 @@
+// 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 org.apache.hivemind.ApplicationRuntimeException;
+import org.apache.hivemind.util.Defense;
+import org.apache.tapestry.IComponent;
+
+/**
+ * Implementation of {@link org.apache.tapestry.form.validator.Validator} that delegates to a
+ * managed bean obtained from a component.
+ *
+ * @author Howard Lewis Ship
+ * @since 4.0
+ */
+public class BeanValidatorWrapper extends AbstractValidatorWrapper
+{
+ private final IComponent _component;
+
+ private final String _name;
+
+ public BeanValidatorWrapper(IComponent component, String name)
+ {
+ Defense.notNull(component, "component");
+ Defense.notNull(name, "name");
+
+ _component = component;
+ _name = name;
+ }
+
+ protected Validator getDelegate()
+ {
+ Object bean = _component.getBeans().getBean(_name);
+
+ if (bean instanceof Validator)
+ return (Validator) bean;
+
+ throw new ApplicationRuntimeException(ValidatorMessages.beanNotValidator(_name), bean,
+ null, null);
+ }
+
+}
Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/ValidatorFactoryImpl.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/ValidatorFactoryImpl.java?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/ValidatorFactoryImpl.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/validator/ValidatorFactoryImpl.java Mon Aug 29 15:38:14 2005
@@ -157,13 +157,7 @@
throw new ApplicationRuntimeException(ValidatorMessages
.noValueOrMessageForBean(beanName));
- Object bean = component.getBeans().getBean(beanName);
-
- if (bean instanceof Validator)
- return (Validator) bean;
-
- throw new ApplicationRuntimeException(ValidatorMessages.beanNotValidator(beanName), bean,
- null, null);
+ return new BeanValidatorWrapper(component, beanName);
}
public void setValidators(Map validators)
Modified: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorFactory.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorFactory.java?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorFactory.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorFactory.java Mon Aug 29 15:38:14 2005
@@ -22,6 +22,8 @@
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.tapestry.IBeanProvider;
import org.apache.tapestry.IComponent;
+import org.apache.tapestry.form.IFormComponent;
+import org.apache.tapestry.form.ValidationMessages;
import org.apache.tapestry.junit.TapestryTestCase;
import org.easymock.MockControl;
@@ -297,12 +299,18 @@
return component;
}
- public void testBeanReference()
+ public void testBeanReference() throws Exception
{
Validator validator = newValidator();
IBeanProvider provider = newBeanProvider("fred", validator);
IComponent component = newComponent(provider);
+ IFormComponent field = newField();
+ ValidationMessages messages = newMessages();
+ Object value = new Object();
+
+ validator.validate(field, messages, value);
+
replayControls();
ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
@@ -311,11 +319,24 @@
List validators = vf.constructValidatorList(component, "$fred");
assertEquals(1, validators.size());
- assertSame(validator, validators.get(0));
+
+ Validator wrapper = (Validator) validators.get(0);
+
+ wrapper.validate(field, messages, value);
verifyControls();
}
+ private ValidationMessages newMessages()
+ {
+ return (ValidationMessages) newMock(ValidationMessages.class);
+ }
+
+ private IFormComponent newField()
+ {
+ return (IFormComponent) newMock(IFormComponent.class);
+ }
+
public void testBeanReferenceNotValidator()
{
Object bean = new Object();
@@ -329,7 +350,12 @@
try
{
- vf.constructValidatorList(component, "$fred");
+ List l = vf.constructValidatorList(component, "$fred");
+
+ Validator wrapper = (Validator) l.get(0);
+
+ wrapper.getAcceptsNull();
+
unreachable();
}
catch (ApplicationRuntimeException ex)
Added: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorWrapper.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorWrapper.java?rev=264648&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorWrapper.java (added)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/validator/TestValidatorWrapper.java Mon Aug 29 15:38:14 2005
@@ -0,0 +1,138 @@
+// 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 org.apache.tapestry.IMarkupWriter;
+import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.form.FormComponentContributorContext;
+import org.apache.tapestry.form.IFormComponent;
+import org.apache.tapestry.form.ValidationMessages;
+import org.easymock.MockControl;
+
+/**
+ * Tests for {@link org.apache.tapestry.form.validator.AbstractValidatorWrapper}
+ *
+ * @author Howard Lewis Ship
+ * @since 4.0
+ */
+public class TestValidatorWrapper extends BaseValidatorTestCase
+{
+ public static class Fixture extends AbstractValidatorWrapper
+ {
+ private final Validator _delegate;
+
+ public Fixture(Validator delegate)
+ {
+ _delegate = delegate;
+ }
+
+ protected Validator getDelegate()
+ {
+ return _delegate;
+ }
+ }
+
+ private Validator newValidator()
+ {
+ return (Validator) newMock(Validator.class);
+ }
+
+ public void testValidate() throws Exception
+ {
+ IFormComponent field = newField();
+ ValidationMessages messages = newMessages();
+ Object value = new Object();
+
+ Validator delegate = newValidator();
+
+ delegate.validate(field, messages, value);
+
+ replayControls();
+
+ new Fixture(delegate).validate(field, messages, value);
+
+ verifyControls();
+ }
+
+ public void testRenderContribution()
+ {
+ IMarkupWriter writer = newWriter();
+ IRequestCycle cycle = newCycle();
+ FormComponentContributorContext context = newContext();
+ IFormComponent field = newField();
+
+ Validator delegate = newValidator();
+
+ delegate.renderContribution(writer, cycle, context, field);
+
+ replayControls();
+
+ new Fixture(delegate).renderContribution(writer, cycle, context, field);
+
+ verifyControls();
+ }
+
+ public void testGetAcceptsNull()
+ {
+ MockControl delegatec = newControl(Validator.class);
+ Validator delegate = (Validator) delegatec.getMock();
+
+ delegate.getAcceptsNull();
+ delegatec.setReturnValue(true);
+
+ replayControls();
+
+ Validator wrapper = new Fixture(delegate);
+
+ assertEquals(true, wrapper.getAcceptsNull());
+
+ verifyControls();
+
+ delegate.getAcceptsNull();
+ delegatec.setReturnValue(false);
+
+ replayControls();
+
+ assertEquals(false, wrapper.getAcceptsNull());
+
+ verifyControls();
+ }
+
+ public void testIsRequired()
+ {
+ MockControl delegatec = newControl(Validator.class);
+ Validator delegate = (Validator) delegatec.getMock();
+
+ delegate.isRequired();
+ delegatec.setReturnValue(true);
+
+ replayControls();
+
+ Validator wrapper = new Fixture(delegate);
+
+ assertEquals(true, wrapper.isRequired());
+
+ verifyControls();
+
+ delegate.isRequired();
+ delegatec.setReturnValue(false);
+
+ replayControls();
+
+ assertEquals(false, wrapper.isRequired());
+
+ verifyControls();
+ }
+}
Modified: jakarta/tapestry/trunk/status.xml
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/status.xml?rev=264648&r1=264647&r2=264648&view=diff
==============================================================================
--- jakarta/tapestry/trunk/status.xml (original)
+++ jakarta/tapestry/trunk/status.xml Mon Aug 29 15:38:14 2005
@@ -53,6 +53,7 @@
<release version="4.0-beta-6" date="unreleased">
<action type="update" dev="HLS" due-to="Henri Yandell">Convert Tapestry repository from CVS to SVN</action>
<action type="fix" dev="HLS" fixes-bug="TAPESTRY-611">Pattern validator invokes wrong client-side JavaScript function</action>
+ <action type="fix" dev="HLS" fixes-bug="TAPESTRY-610">$bean syntax for validators: binding prefix is broken</action>
</release>
<release version="4.0-beta-5" date="Aug 26 2005">
<action type="fix" dev="MB,HLS" fixes-bug="TAPESTRY-552">Improperly configured SerializableAdaptor (for DataSqueezer) prevents serialized objects from being de-serialized</action>
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org