You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Nathan Quirynen <na...@pensionarchitects.be> on 2016/09/15 14:20:57 UTC
Validate annotation on field
Hi,
I want to use the @Validate annotation, but I cannot put it at the value
properties, because these properties are part of a DTO object that is
part of a library.
In the documentation
(http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/beaneditor/Validate.html)
I found the following: " May be placed on any getter or setter method,
or on the matching field".
So I thought I could do the following:
@Validate("regexp="+SOME_REGEXP)
@InjectComponent
private Field someField;
But this does not seem to work?
Is there any other way to add validators to a field programatically when
you have no access to the property declarations?
I could do all validation myself in the onValidate event, but this does
not seem optimal.
Nathan
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Validate annotation on field
Posted by Barry Books <tr...@gmail.com>.
I think you could do this with JSR303 validators if you detect it's a field
and pass the value of the field to the validator.
See: https://github.com/trsvax/tapestry-nocode/blob/master/04.md for a way
to automatically validate in the onValidate event
On Thursday, September 15, 2016, Nathan Quirynen <
nathan@pensionarchitects.be> wrote:
> Hi,
>
> I want to use the @Validate annotation, but I cannot put it at the value
> properties, because these properties are part of a DTO object that is part
> of a library.
> In the documentation (http://tapestry.apache.org/cu
> rrent/apidocs/org/apache/tapestry5/beaneditor/Validate.html) I found the
> following: " May be placed on any getter or setter method, or on the
> matching field".
>
> So I thought I could do the following:
>
> @Validate("regexp="+SOME_REGEXP)
> @InjectComponent
> private Field someField;
>
> But this does not seem to work?
>
> Is there any other way to add validators to a field programatically when
> you have no access to the property declarations?
> I could do all validation myself in the onValidate event, but this does
> not seem optimal.
>
> Nathan
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
Re: Validate annotation on field
Posted by Nathan Quirynen <na...@pensionarchitects.be>.
Hey,
I tried solving it the following way using the FieldValidatorSource service:
<t:textfield t:id="someField" t:value="someValue"
t:validate="prop:someFieldValidate" />
public FieldValidator<Object> getSomeFieldValidate() {
StringBuilder validate = new StringBuilder()
.append("required")
.append(",")
.append("regexp="+SOME_REGEXP);
return fieldValidatorSource.createValidators(someField,
validate.toString());
}
But now I have a problem when SOME_REGEXP contains a space character it
throws following error:
java.lang.RuntimeException
*Unexpected character ']' at position 26 of input string:
required,regexp=^[A-�'\- ]*$*
org.apache.tapestry5.internal.services.FieldValidatorSourceImpl
parseError() FieldValidatorSourceImpl.java 422
org.apache.tapestry5.internal.services.FieldValidatorSourceImpl parse()
FieldValidatorSourceImpl.java 381
org.apache.tapestry5.internal.services.FieldValidatorSourceImpl
toValidatorSpecifications() FieldValidatorSourceImpl.java 199
org.apache.tapestry5.internal.services.FieldValidatorSourceImpl
createValidators() FieldValidatorSourceImpl.java 182
...
I used this same regexp value in the @Validate annotation before without
problems, but with my method above it gives the above parsing error.
Anyone know how I can solve the above problem?
Nathan
On 15/09/16 16:20, Nathan Quirynen wrote:
> Hi,
>
> I want to use the @Validate annotation, but I cannot put it at the
> value properties, because these properties are part of a DTO object
> that is part of a library.
> In the documentation
> (http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/beaneditor/Validate.html)
> I found the following: " May be placed on any getter or setter method,
> or on the matching field".
>
> So I thought I could do the following:
>
> @Validate("regexp="+SOME_REGEXP)
> @InjectComponent
> private Field someField;
>
> But this does not seem to work?
>
> Is there any other way to add validators to a field programatically
> when you have no access to the property declarations?
> I could do all validation myself in the onValidate event, but this
> does not seem optimal.
>
> Nathan
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
Re: Validate annotation on field
Posted by Nathan Quirynen <na...@pensionarchitects.be>.
Hey thanks for your reply.
The problem is that the regular expression is defined in a library as a
constant and reused at a lot of places, so I want to use this constant
instead of putting it everywhere myself, that's why I'm searching for
another solution where I can use this constant and also without using
the @Validate annotation as I have no access to the field declarations
(also in a library).
On 16/09/16 14:14, Thiago H de Paula Figueiredo wrote:
> On Thu, 15 Sep 2016 11:20:57 -0300, Nathan Quirynen
> <na...@pensionarchitects.be> wrote:
>
>> Hi,
>
> Hi!
>
>> @Validate("regexp="+SOME_REGEXP)
>> @InjectComponent
>> private Field someField;
>> But this does not seem to work?
>
> This isn't supposed to work. You should annotate the field or getter
> whose value is being validated, not the form field component. What
> about adding validate="regexp:[\\d]{1-2}", for example, to the
> <t:textfield> directly?
>
>> Is there any other way to add validators to a field programatically
>> when you have no access to the property declarations?
>> I could do all validation myself in the onValidate event, but this
>> does not seem optimal.
>
> See above.
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Validate annotation on field
Posted by Thiago H de Paula Figueiredo <th...@gmail.com>.
On Thu, 15 Sep 2016 11:20:57 -0300, Nathan Quirynen
<na...@pensionarchitects.be> wrote:
> Hi,
Hi!
> @Validate("regexp="+SOME_REGEXP)
> @InjectComponent
> private Field someField;
> But this does not seem to work?
This isn't supposed to work. You should annotate the field or getter whose
value is being validated, not the form field component. What about adding
validate="regexp:[\\d]{1-2}", for example, to the <t:textfield> directly?
> Is there any other way to add validators to a field programatically when
> you have no access to the property declarations?
> I could do all validation myself in the onValidate event, but this does
> not seem optimal.
See above.
--
Thiago H. de Paula Figueiredo
Tapestry, Java and Hibernate consultant and developer
http://machina.com.br
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org