Вставить в базу данных Groovy Grails
Я новый разработчик для Groovy Grails, и у меня есть таблица с именем user в тесте базы данных. Мне удалось войти в эту базу данных, используя grails, но я не смог зарегистрировать нового пользователя.
Вот мой register.gsp
<g:form controller="user" action="registration">
<fieldset class="form">
<div class="fieldcontation ${hasErrors(bean: userInstance, field: 'fullName', 'error')}">
<label for="fullName">
<g:message code="endUser.fullName.label" default="Full Name" />
</label>
<g:textField name="fullName" value="${userInstance?.fullName}"/>
</div>
<div class="fieldcontation ${hasErrors(bean: userInstance, field: 'userName', 'error')}">
<label for="userName">
<g:message code="endUser.userName.label" default="User Name" />
</label>
<g:textField name="userName" value="${userInstance?.userName}"/>
</div>
<div class="fieldcontain ${hasErrors(bean: userInstance, field: 'password', 'error')} ">
<label for="password">
<g:message code="endUser.password.label" default="Password"/>
</label>
<g:field type="password" name="password" value="${userInstance?.password}"/>
</div>
</fieldset>
<fieldset class="buttons">
<g:submitButton name="register" class="save" value="Register" />
</fieldset>
</g:form>
вот мой UserController.groovy
package test
import java.sql.SQLClientInfoException;
import javax.activation.DataSource;
import grails.converters.JSON
class UserController {
def index() {
redirect(action:"login")
}
def register = {}
def login = {}
def registration = {
def b = new User(fullName:params.fullName, userName:params.userName, password:params.password)
b.save()
render (b as JSON)
}
def authenticate = {
def user = User.findByUserNameAndPassword(params.userName, params.password)
if (user){
def userMap = [:]
userMap.put("login", "true")
userMap.put("name", user.fullName)
userMap.put("password", user.password)
render (userMap as JSON)
}else{
flash.message = "Sorry, ${params.userName}, Please try again."
redirect(action:"login")
}
}
def logout = {
flash.message = "Goodbye ${session.user.fullName}"
session.user = null
redirect(action:"login")
}
}
После этого метода у меня была эта ошибка
http://postimg.org/image/gbitzsokp/
Но я не мог понять, что он пытался сказать
вот мой DataSource.groovy
dataSource {
pooled = true
jmxExport = true
driverClassName = "com.mysql.jdbc.Driver"
username = "admin"
password = "admin"
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider'
}
// environment specific settings
environments {
development {
dataSource {
dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
url = "jdbc:mysql://localhost:3306/test"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:mysql://localhost:3306/test"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:mysql://localhost:3306/test"
}
}
}
Мой домен класса User.groovy
пакетный тест
класс User {
String userName
String password
String fullName
String toString(){
"${fullName}"
}
static constraints = {
fullName()
userName(unique: true)
//password(password=true)
}
}
Вставные - х
plugins {
build ":tomcat:7.0.55"
compile ":scaffolding:2.1.2"
compile ':cache:1.1.8'
compile ":asset-pipeline:1.9.9"
compile ":simpledb:0.5"
runtime ":hibernate4:4.3.6.1" // or ":hibernate:3.6.10.18"
runtime ":database-migration:1.4.0"
runtime ":jquery:1.11.1"
}
Я могу сразу заверить любую необходимую вам информацию. Спасибо
Моя версия Grails 2.4.4
1 ответ
Как уже упоминалось @saw303, GORM предоставляет то, что вы ищете. Так что нет необходимости писать операторы SQL.
Workflow
Я предполагаю, что рабочий процесс, который вам нужен, выглядит примерно так:
register
Действие рендеринга register.gsp, регистрационная форма.- Когда регистрационная форма представлена
registration
действие обрабатывает запрос. Если все идет хорошо, пользователь устанавливается в область действия сеанса, и браузер перенаправляется куда-то, например на домашнюю страницу. В противном случае браузер будет перенаправлен наregister
Действие и ошибки проверки отображаются в регистрационной форме.
Вот как создать такой рабочий процесс.
Регистрация действий
Начните с внесения ряда изменений в registration
действие.
import grails.transaction.Transactional
class UserController {
// NOTE: Making the method Transactional avoids having to flush saves.
@Transactional
def registration() {
def user = new User(params).save()
if(user.hasErrors()) {
/*
* On failure, redirect back to registration form,
* and pass the User instance to the GSP page in the
* flash scope so that validation errors can be rendered.
*/
flash.userInstance = user
redirect action: 'register'
} else {
/* On success, place User instance in session scope,
* and redirect to home page.
*/
session.user = user
redirect uri: '/'
}
}
}
- Я добавил транзакционную аннотацию, чтобы очистка сохранений GORM выполнялась автоматически.
registration
теперь метод вместо замыкания. Это новый способ.
register.gsp
Чтобы отобразить ошибки проверки в форме регистрации, измените hasErrors()
звонки из bean: userInstance
в model: flash?.userInstance
Например, для свойства fullName выполните ${hasErrors(model: flash?.userInstance, field: 'fullName', 'error')}