I would like to get your suggestion about how to validate a user name input
by checking if the name has already been taken (exists in the back-end
database); and how to show feedback messages right next to the input field
if it has.

Typically, when a user registers to a website, he needs to choose a user
name, a password, etc. To make sure that the chosen name is unique, one
needs to access the back-end database to check if it already exists.

My solution right now is to extend "AbstractValidator<String>", and override
"onValidate(IValidatable<String> validatable)" to put the database-checking
logic in it. But the more I think about it, the more I felt it might be a
wrong solution. The problem (I think, not 100% sure) is that
"onValidate(IValidatable<String> validatable)" will be called during the
form validation process, even if this process goes through, I may still find
out later that the user chosen name has been taken when trying to save all
the user inputs (name, password, etc) to the database. This happens when
another user registers with the same name between the time the validation
process finished and the time I start persisting all inputs from the first
user to the database,

So now I am trying to figure out another solution. Here is the idea: Instead
of putting the database-checking logic into the validation process, I simply
try to save all the user inputs into the database after receiving them. If
an unique key exception happens, I know that the user chosen name has been
taken. Now my questions are:
1. where should I put this save-catch-exception logic? Is "Form.onSubmit()"
the right place to put it?
2. After I catch an unique key exception. How can I show a feedback message
like "This name has already been taken" RIGHT NEXT to the user name input
field? (Just like what a typical Wicket Validator does though

I am new to Wicket and your inputs and suggestions are greatly appreciated.


Reply via email to