добрые люди, помогите если сможете. у меня есть контроллер для регистрации нового пользователя и там метод для регистрации. и специально для логики создал сервис. вот они:
UserController.groovy
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
def saveUser() {
def salt = new SecureRandomNumberGenerator().nextBytes().getBytes()
def user
try {
user = userService.registerMethod(params.username, params.passwordHash, params.passwordHash2,
salt, params.firstName, params.lastName, params.sex, params.email, params.mobile, params.userType)
session.user = user
flash.message = "User ${user.profile.firstName} ${user.profile.lastName} was successfuly created!"
redirect(uri:"/")
} catch (UserRegistrationException ure) {
user = ure.user
if (user) {
render(view:"registration",model:[user:user])
} else {
flash.message = ure.message
redirect(action:"registration")
}
}
}
UserService.groovy
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
User registerMethod(String username, String password1, String password2, Object salt, String firstName, String lastName,
String sex, String email, String mobile, String userType) {
def user = User.findByUsername(username)
if(user) {
//flash.message = "User already exists with login ${username}"
throw new UserRegistrationException(message:"User already exists with login ${username}")
redirect(uri:"/")
} else {
if (password1 != password2) {
//flash.message = "Passwords don't match"
throw new UserRegistrationException(message:"Passwords don't match")
} else {
def profile = Profile.findByEmail(email)
if (profile && (email == profile.email)) {
//flash.message = "User with this email is already exists!"
throw new UserRegistrationException(message:"User with this email is already exists!")
} else {
user = new User(
username:username,
passwordHash: new Sha512Hash(password1, salt, 1024).toHex(),
passwordSalt:salt,
profile: new Profile(
firstName:firstName,
lastName:lastName,
sex:sex,
email:email,
mobile:mobile,
userType:userType
)
)
if (!user.hasErrors() && user.save(flush:true,failOnError:true)) {
def authToken = new UsernamePasswordToken(username, password1)
SecurityUtils.subject.login(authToken)
return user
} else {
throw new UserRegistrationException(message:"Can't create user");
}
}
}
}
}
registration.gsp
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
<body>
<h1>Registraion Page</h1>
<g:if test="${ flash.message }">
${ flash.message }
</g:if>
<g:hasErrors bean="${ user }">
<g:renderErrors bean="${ user }" as="list"/>
</g:hasErrors>
<div id="registration">
<g:form action="saveUser">
<table>
<tr>
<td><label for="username">Login: </label></td>
<td><g:textField name="username" id="username" /></td>
</tr>
<tr>
<td><label for="firstName">First Name: </label></td>
<td><g:textField name="firstName" id="firstName"/></td>
</tr>
<tr>
<td><label for="lastName">Last Name: </label></td>
<td><g:textField name="lastName" id="lastName"/></td>
</tr>
<tr>
<td><label for="sex">Sex: </label></td>
<td><g:radioGroup values="['M','F']" name="sex" labels="['Male','Female']">
<p>${ it.radio } ${ it.label }</p>
</g:radioGroup></td>
</tr>
<tr>
<td><label for="email">Email: </label></td>
<td><g:textField name="email" id="email"/></td>
</tr>
<tr>
<td><label for="mobile">Mobile: </label></td>
<td><g:textField name="mobile" id="mobile"/></td>
</tr>
<tr>
<td><label for="passwordHash">Password: </label></td>
<td><g:passwordField name="passwordHash" id="passwordHash"/></td>
</tr>
<tr>
<td><label for="passwordHash2">Confirm password: </label></td>
<td><g:passwordField name="passwordHash2" name="passwordHash2" id="passwordHash2" /></td>
</tr>
<tr>
<td><label for="userType">User Type: </label></td>
<td>
<g:radioGroup values="['F','H']" name="userType" labels="['Freelancer','Client']">
<p>${ it.radio } ${ it.label }</p>
</g:radioGroup>
</td>
</tr>
<tr>
<td><g:submitButton name="saveUser" value="Register"/> </td>
</tr>
</table>
</g:form>
</div>
</body>
проблема вот в чем, когда пользователь например пишет неправильный емаил, без знака @, то по идее в браузере должен показываться дефолтное сообщение об ошибке типа:
автор[Property [{0}] of class [{1}] with value [{2}] is not a valid e-mail address]
но у меня в браузере выходит
Error 500: Internal Server Error со всеми сообщениями эксепшиона. как сделать так, чтоб показывал только ошибку, что емаил неправильный? может я в коде что-то начудил и неправильно написал? я новичок в grails