Re: [t5] Validator question

2008-03-25 Thread Julian Wood

Not possible?

Sometimes a validator needs to look at input from another field to see  
if it is valid (ie password/confirmPassword). I know it's easy to do  
in onValidateForm, but I'd like to see how to do it in a nice modular  
Validator. I'm looking for something like:


public void validate(Field field, String sourceFieldId,  
MessageFormatter formatter, Object value) throws ValidationException {

Component page = ((AbstractField) field)._resources.getPage();
try {
Method getter =  
page.getClass().getDeclaredMethod(getMethodName(sourceFieldId));

String sourceValue = (String) getter.invoke(page);
if (value == null || !value.toString().equals(sourceValue))
throw new ValidationException(buildMessage(formatter,  
field));

} catch (Exception e) {
log.error(No public getter field in page for:  +  
sourceFieldId);

}
}


but can't do that (the only problem being the private _resources). How  
can that be done in a Validator? I can't inject anything. I don't  
actually need to make my own field which exposes the  
ComponentResources, do I?


Thanks.

J



On Mar 24, 2008, at 5:17 PM, Julian Wood wrote:

How can you get access to an arbitrary Field from inside a  
Validator, given its id? In t4 it was relatively easy to grab the  
form and from there grab a field.


Thanks,

J

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [t5] Validator question

2008-03-25 Thread Howard Lewis Ship
Sorry, those APIs are not in place yet.  I have JIRA issue add
optional validators, which is a loose, general term for what you are
aiming for (password is required if userName is given).

I think some relationships may not be expressable using the @Validate
annotation, i.e., the string representation; I'm thinking there will
be a kind of JavaScript template object that will be used to generate
some kinds of JavaScript.

Things have slowed down on 5.0 for a moment, while I work on an urgent
client project (in Tapestry 5).

On Tue, Mar 25, 2008 at 11:08 AM, Julian Wood [EMAIL PROTECTED] wrote:
 Not possible?

  Sometimes a validator needs to look at input from another field to see
  if it is valid (ie password/confirmPassword). I know it's easy to do
  in onValidateForm, but I'd like to see how to do it in a nice modular
  Validator. I'm looking for something like:

  public void validate(Field field, String sourceFieldId,
  MessageFormatter formatter, Object value) throws ValidationException {
  Component page = ((AbstractField) field)._resources.getPage();
  try {
  Method getter =
  page.getClass().getDeclaredMethod(getMethodName(sourceFieldId));
  String sourceValue = (String) getter.invoke(page);
  if (value == null || !value.toString().equals(sourceValue))
  throw new ValidationException(buildMessage(formatter,
  field));
  } catch (Exception e) {
  log.error(No public getter field in page for:  +
  sourceFieldId);
  }
  }


  but can't do that (the only problem being the private _resources). How
  can that be done in a Validator? I can't inject anything. I don't
  actually need to make my own field which exposes the
  ComponentResources, do I?

  Thanks.

  J





  On Mar 24, 2008, at 5:17 PM, Julian Wood wrote:

   How can you get access to an arbitrary Field from inside a
   Validator, given its id? In t4 it was relatively easy to grab the
   form and from there grab a field.
  
   Thanks,
  
   J
  
   -
   To unsubscribe, e-mail: [EMAIL PROTECTED]
   For additional commands, e-mail: [EMAIL PROTECTED]
  
  


  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]





-- 
Howard M. Lewis Ship

Creator Apache Tapestry and Apache HiveMind

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [t5] Validator question

2008-03-25 Thread Julian Wood

Ok no worries.

On a related note, where do you put the messages file for a custom  
validator? In the example below, which looks for a key called  
'confirm', I have tried Confirm.properties (in same package as  
validator called Confirm.java), Signup.properties (the page using the  
validator) and app.properties. The latter two of course have  
verifiably working messages. I always get a [[missing key: confirm]]  
though.


Back to my validator question, I couldn't find the JIRA issue you were  
referring to.


BTW, the client side of this type of a validator works quite nicely.

In .java:

@Validate(required)
public String getPassword() {
return password;
}

@Validate(required,confirm=password)
public String getConfirmPassword() {
return confirmPassword;
}

On the .tml:

script
Object.extend(Tapestry.Validator, {
confirm: function(field, message, constraint) {
Tapestry.addValidator(field, true, function(value, event)
{
var confirmationSourceField = $(constraint);
if (confirmationSourceField == null) {
console.error(No such field:  + constraint);
return;
} else if (value != confirmationSourceField.value) {
event.recordError(message);
}
});
}
})
/script

And in Confirm.java (the validator):

public void render(Field field, String sourceFieldId,  
MessageFormatter formatter, MarkupWriter markupWriter, FormSupport  
formSupport) {
formSupport.addValidation(field, confirm,  
buildMessage(formatter, field), sourceFieldId);

}

J

On Mar 25, 2008, at 12:27 PM, Howard Lewis Ship wrote:


Sorry, those APIs are not in place yet.  I have JIRA issue add
optional validators, which is a loose, general term for what you are
aiming for (password is required if userName is given).

I think some relationships may not be expressable using the @Validate
annotation, i.e., the string representation; I'm thinking there will
be a kind of JavaScript template object that will be used to generate
some kinds of JavaScript.

Things have slowed down on 5.0 for a moment, while I work on an urgent
client project (in Tapestry 5).

On Tue, Mar 25, 2008 at 11:08 AM, Julian Wood [EMAIL PROTECTED]  
wrote:

Not possible?

Sometimes a validator needs to look at input from another field to  
see

if it is valid (ie password/confirmPassword). I know it's easy to do
in onValidateForm, but I'd like to see how to do it in a nice modular
Validator. I'm looking for something like:

public void validate(Field field, String sourceFieldId,
MessageFormatter formatter, Object value) throws  
ValidationException {
Component page = ((AbstractField)  
field)._resources.getPage();

try {
Method getter =
page.getClass().getDeclaredMethod(getMethodName(sourceFieldId));
String sourceValue = (String) getter.invoke(page);
if (value == null || ! 
value.toString().equals(sourceValue))

throw new ValidationException(buildMessage(formatter,
field));
} catch (Exception e) {
log.error(No public getter field in page for:  +
sourceFieldId);
}
}


but can't do that (the only problem being the private _resources).  
How

can that be done in a Validator? I can't inject anything. I don't
actually need to make my own field which exposes the
ComponentResources, do I?

Thanks.

J





On Mar 24, 2008, at 5:17 PM, Julian Wood wrote:


How can you get access to an arbitrary Field from inside a
Validator, given its id? In t4 it was relatively easy to grab the
form and from there grab a field.

Thanks,

J

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]






--
Howard M. Lewis Ship

Creator Apache Tapestry and Apache HiveMind

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [t5] Validator question

2008-03-25 Thread Julian Wood

Actually, I was able to get this done.

I had to contributeValidationMessagesSource to get the messages.

And to get to the current page component from within the Validator, I  
was able to do this:


public static void contributeFieldValidatorSource 
(MappedConfigurationString, Validator configuration,
  @InjectService 
(ComponentSource)ComponentSource componentSource,
  @InjectService 
(Request)Request request

  ) {
configuration.add(confirm, new Confirm(componentSource,  
request));

}

and then:

String[] pathComponents = request.getPath().split(/);
String pageComponent = pathComponents[pathComponents.length  
- 1];

String[] pageComponents = pageComponent.split(\\.);
Component page = componentSource.getPage(pageComponents[0]);

but this seems a little fragile. Is there a better way?

I do see what you mean though - there is nowhere to attach a piece of  
javascript to accompany this validator, so it just goes into my own  
global library. But I'm pretty happy overall with this solution.


J

On 25-Mar-08, at 2:13 PM, Julian Wood wrote:


Ok no worries.

On a related note, where do you put the messages file for a custom  
validator? In the example below, which looks for a key called  
'confirm', I have tried Confirm.properties (in same package as  
validator called Confirm.java), Signup.properties (the page using  
the validator) and app.properties. The latter two of course have  
verifiably working messages. I always get a [[missing key:  
confirm]] though.


Back to my validator question, I couldn't find the JIRA issue you  
were referring to.


BTW, the client side of this type of a validator works quite nicely.

In .java:

@Validate(required)
public String getPassword() {
return password;
}

@Validate(required,confirm=password)
public String getConfirmPassword() {
return confirmPassword;
}

On the .tml:

script
Object.extend(Tapestry.Validator, {
confirm: function(field, message, constraint) {
Tapestry.addValidator(field, true, function(value, event)
{
var confirmationSourceField = $(constraint);
if (confirmationSourceField == null) {
console.error(No such field:  + constraint);
return;
} else if (value != confirmationSourceField.value) {
event.recordError(message);
}
});
}
})
/script

And in Confirm.java (the validator):

public void render(Field field, String sourceFieldId,  
MessageFormatter formatter, MarkupWriter markupWriter, FormSupport  
formSupport) {
formSupport.addValidation(field, confirm, buildMessage 
(formatter, field), sourceFieldId);

}

J

On Mar 25, 2008, at 12:27 PM, Howard Lewis Ship wrote:


Sorry, those APIs are not in place yet.  I have JIRA issue add
optional validators, which is a loose, general term for what you are
aiming for (password is required if userName is given).

I think some relationships may not be expressable using the @Validate
annotation, i.e., the string representation; I'm thinking there will
be a kind of JavaScript template object that will be used to generate
some kinds of JavaScript.

Things have slowed down on 5.0 for a moment, while I work on an  
urgent

client project (in Tapestry 5).

On Tue, Mar 25, 2008 at 11:08 AM, Julian Wood [EMAIL PROTECTED]  
wrote:

Not possible?

Sometimes a validator needs to look at input from another field  
to see

if it is valid (ie password/confirmPassword). I know it's easy to do
in onValidateForm, but I'd like to see how to do it in a nice  
modular

Validator. I'm looking for something like:

public void validate(Field field, String sourceFieldId,
MessageFormatter formatter, Object value) throws  
ValidationException {
Component page = ((AbstractField)  
field)._resources.getPage();

try {
Method getter =
page.getClass().getDeclaredMethod(getMethodName(sourceFieldId));
String sourceValue = (String) getter.invoke(page);
if (value == null || !value.toString().equals 
(sourceValue))
throw new ValidationException(buildMessage 
(formatter,

field));
} catch (Exception e) {
log.error(No public getter field in page for:  +
sourceFieldId);
}
}


but can't do that (the only problem being the private  
_resources). How

can that be done in a Validator? I can't inject anything. I don't
actually need to make my own field which exposes the
ComponentResources, do I?

Thanks.

J





On Mar 24, 2008, at 5:17 PM, Julian Wood wrote:


How can you get access to an arbitrary Field from inside a
Validator, given its id? In t4 it was relatively easy to grab the
form and from there grab a field.

Thanks,

J


Re: T5 validator question

2008-03-12 Thread Riccardo Ruffilli

I've already found my answer in the magical 

@Inject 
private FieldValidatorSource _fieldValidatorSource;

with the 

_fieldValidatorSource.createValidator(this, myRegistredValidator, null);

everything works fine !

Bye

-Rick










Riccardo Ruffilli wrote:
 
 Hi All,
 
 I'm working on validator class in my t5 application, and I've defined my
 own validator
 that implements ValidatorVoid, Object I've registred them like t5
 contribution in 
 my AppModule.java and then I can use them easily in my tag with the 
 parameter validator=validate:myownvalidator.
 
 With the validate prefix I've noticed that t5 obtain a FieldValidatorImpl
 that contains myvalidator
 instance like _validate internal property.
 I'd like to modelize my component to make it working without any template
 explicit parameter
 using a model class that wrap all my tag parameter in that way
 
 t:mycomponent t:mymodel=prop:componentModel /
 
 instead of
 
 t:mycomponent t:par1=prop:par1Value t:par2=prop:par2Value /
 
 and at rendering time My component get all that values from the model
 specified.
 That works fine exept for validator parameter because I need to obtain
 myown FieldValidatorImpl
 instance.
 
 Any ideas about that ?
 
 Many thanks in advance.
 
 -Rick
 
 
 
 

-- 
View this message in context: 
http://www.nabble.com/T5-validator-question-tp16001442p16001764.html
Sent from the Tapestry - User mailing list archive at Nabble.com.


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]