powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / hasErrors не работает в grails
2 сообщений из 2, страница 1 из 1
hasErrors не работает в grails
    #37855944
danyalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрые люди, помогите если сможете. у меня есть контроллер для регистрации нового пользователя и там метод для регистрации. и специально для логики создал сервис. вот они:

UserController.groovy
Код: java
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
Код: java
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
Код: html
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
...
Рейтинг: 0 / 0
hasErrors не работает в grails
    #37861868
danyalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
danyalov,
ну так как никто не ответил, то я сам нашел ошибку. если кому нибудь в будущем понадобится, то проблема была в том, что в сервисе при проверке
Код: java
1.
user.save(flush:true, failOnError: true)

failOnError:true надо убрать и все
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / hasErrors не работает в grails
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]