Repository: wicket Updated Branches: refs/heads/master edeb2ccd8 -> 9e03f68f1
Added custom constraint to bean validation example Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/9e03f68f Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/9e03f68f Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/9e03f68f Branch: refs/heads/master Commit: 9e03f68f192f6f4e746e2f443ace36e4ff17fc24 Parents: edeb2cc Author: Andrea Del Bene <[email protected]> Authored: Thu Sep 11 11:32:31 2014 +0200 Committer: adelbene <[email protected]> Committed: Thu Sep 11 11:34:28 2014 +0200 ---------------------------------------------------------------------- .../bean/validation/BeanValidationPage.html | 6 ++ .../bean/validation/BeanValidationPage.java | 1 + .../validation/BeanValidationPage.properties | 2 + .../wicket/examples/bean/validation/Person.java | 12 ++++ .../validation/constraint/ValidPassword.java | 42 ++++++++++++++ .../constraint/ValidPasswordValidator.java | 58 ++++++++++++++++++++ .../wicket/examples/homepage/HomePage.html | 2 +- 7 files changed, 122 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/9e03f68f/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.html ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.html b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.html index f266cb9..4ac3cb5 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.html +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.html @@ -35,6 +35,12 @@ <td><pre class="note">m/d/yyyy field with @Past</pre></td> </tr> <tr> + <td><label wicket:for="password"><wicket:label>Password</wicket:label></label></td> + <td><input wicket:id="password" type="text" size="10"/></td> + <td><pre class="note">Custom constraint @ValidPassword with custom message bundles.<br/>A valid password must contain only alphanumeric chars and at least two digits.</pre> + </td> + </tr> + <tr> <td></td> <td> <input type="submit" value="Submit"/> http://git-wip-us.apache.org/repos/asf/wicket/blob/9e03f68f/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.java ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.java index 8618b1b..63015df 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.java +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.java @@ -44,6 +44,7 @@ public class BeanValidationPage extends WicketExamplePage form.add(new TextField<String>("email", new PropertyModel<String>(this, "person.email")).add(new PropertyValidator<>())); form.add(new DateTextField("birthdate", new PropertyModel<Date>(this, "person.birthdate"), new StyleDateConverter("S-", true)).add(new PropertyValidator<>())); + form.add(new TextField<String>("password", new PropertyModel<String>(this, "person.password")).add(new PropertyValidator<>())); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/wicket/blob/9e03f68f/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.properties ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.properties b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.properties index c89b963..4d499b1 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.properties +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationPage.properties @@ -12,3 +12,5 @@ # 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. +password.needDigits=You need to have at least 2 digits in your password. +password.validChars=Password value can contain only characters and digits. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/wicket/blob/9e03f68f/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/Person.java ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/Person.java b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/Person.java index 286627a..59293dc 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/Person.java +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/Person.java @@ -24,6 +24,7 @@ import javax.validation.constraints.Past; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; +import org.apache.wicket.examples.bean.validation.constraint.ValidPassword; import org.hibernate.validator.constraints.Email; public class Person implements Serializable @@ -41,6 +42,9 @@ public class Person implements Serializable @Past private Date birthdate; + + @ValidPassword + private String password; public String getName() { @@ -82,5 +86,13 @@ public class Person implements Serializable this.birthdate = birthdate; } + public String getPassword() + { + return password; + } + public void setPassword(String password) + { + this.password = password; + } } http://git-wip-us.apache.org/repos/asf/wicket/blob/9e03f68f/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/constraint/ValidPassword.java ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/constraint/ValidPassword.java b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/constraint/ValidPassword.java new file mode 100644 index 0000000..2ea66ff --- /dev/null +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/constraint/ValidPassword.java @@ -0,0 +1,42 @@ +/* + * 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.wicket.examples.bean.validation.constraint; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import javax.validation.Constraint; +import javax.validation.Payload; + +@Target( { METHOD, FIELD, ANNOTATION_TYPE }) +@Retention(RUNTIME) +@Constraint(validatedBy = ValidPasswordValidator.class) +@Documented +public @interface ValidPassword +{ + String message() default "{password.validChars}"; + + Class<?>[] groups() default {}; + + Class<? extends Payload>[] payload() default {}; +} http://git-wip-us.apache.org/repos/asf/wicket/blob/9e03f68f/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/constraint/ValidPasswordValidator.java ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/constraint/ValidPasswordValidator.java b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/constraint/ValidPasswordValidator.java new file mode 100644 index 0000000..11802e6 --- /dev/null +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/constraint/ValidPasswordValidator.java @@ -0,0 +1,58 @@ +/* + * 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.wicket.examples.bean.validation.constraint; + +import java.util.regex.Pattern; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + + +public class ValidPasswordValidator implements ConstraintValidator<ValidPassword, String> +{ + + private final Pattern content = Pattern.compile("[0-9a-zA-Z]*"); + private final Pattern digits = Pattern.compile("(.*\\d.*){2}"); + + @Override + public void initialize(ValidPassword constraintAnnotation) + { + + } + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) + { + boolean validationResult = true; + + if (!content.matcher(value).matches()) + { + validationResult = false; + } + else if (!digits.matcher(value).matches()) + { + context.disableDefaultConstraintViolation(); + context.buildConstraintViolationWithTemplate("{password.needDigits}") + .addConstraintViolation(); + + validationResult = false; + } + + return validationResult; + } + +} http://git-wip-us.apache.org/repos/asf/wicket/blob/9e03f68f/wicket-examples/src/main/resources/org/apache/wicket/examples/homepage/HomePage.html ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/resources/org/apache/wicket/examples/homepage/HomePage.html b/wicket-examples/src/main/resources/org/apache/wicket/examples/homepage/HomePage.html index e6c5daf..4789751 100644 --- a/wicket-examples/src/main/resources/org/apache/wicket/examples/homepage/HomePage.html +++ b/wicket-examples/src/main/resources/org/apache/wicket/examples/homepage/HomePage.html @@ -65,7 +65,7 @@ <tr><td align="right"><a href="resourceaggregation">Resource decoration</a></td><td> - Shows aggregation of css and js resources</td></tr> <tr><td align="right"><a href="atmosphere">Atmosphere</a></td><td> - Atmosphere Framework integration</td></tr> <tr><td align="right"><a href="cdi">CDI</a></td><td> - Context Dependency and Injection integration</td></tr> - <tr><td align="right"><a href="bean-validation">Bean Validation</a></td><td> - Bean Validation integration</td></tr> + <tr><td align="right"><a href="bean-validation">Bean Validation</a></td><td> - Bean Validation integration (JSR 303)</td></tr> </tbody> </table> </div>
