Пожалуйста советоваться алидада в:
Взгляните на Grails scaffolding, это отличный ре источник понять, как Grails works.- алидада
Это сказанное, мы можем посмотреть на то, что создается при запуске grails generate-all testapp.User
и как он относится к вашему вопросу.
generate-all с созданием контроллера и представлений на основе вашего класса домена User.
package testapp
class User {
String userName
static constraints = {
userName()
}
}
Обратите внимание на статических ограничениях (это отличное место, чтобы добавить валидацию) но все, что вам нужно для того, чтобы генерировать представления и контроллеры, связанные с конкретными значениями, чтобы добавить их к статическим ограничениям в классе домена ,
Вы хотите иметь возможность обновлять класс домена. Ну код для этого был создан для нас! , если вы посмотрите на мнения/пользователя/edit.gsp
<g:form url="[resource:userInstance, action:'update']" method="PUT" >
<g:hiddenField name="version" value="${userInstance?.version}" />
<fieldset class="form">
<g:render template="form"/>
</fieldset>
<fieldset class="buttons">
<g:actionSubmit class="save" action="update" value="${message(code: 'default.button.update.label', default: 'Update')}" />
</fieldset>
</g:form>
Это создаст форму для обновления текущего пользователя, которого мы выбрали в этом случае userInstance
.
Также важное замечание <g:form url="[resource:userInstance, action:'update']" method="PUT" >
это говорит нам, какой контроллер будет называться на основе ресурса и метод будет вызываться, основываясь на действии (Вы можете посмотреть больше в хороший дизайн для управления вызывающему здесь Grails WebServices REST)
Это будет вызывать контроллеры/TestApp/UserController.groovy - обновление, которое принимает экземпляр пользователя
@Transactional
def update(User userInstance) {
if (userInstance == null) {
notFound()
return
}
if (userInstance.hasErrors()) {
respond userInstance.errors, view:'edit'
return
}
userInstance.save flush:true
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.updated.message', args: [message(code: 'User.label', default: 'User'), userInstance.id])
redirect userInstance
}
'*'{ respond userInstance, [status: OK] }
}
}
Что вы можете увидеть делает некоторые проверки, чтобы убедиться, что экземпляр существует и не имеет ошибок (который базируется подтверждения, которое вы добавляете в свой класс домена), затем сохраняет обновленный экземпляр пользователя и затем возвращает сообщение. Также хорошей практикой является перенос «работы» из вашего контроллера и в класс обслуживания.
Но есть много разных способов кожи кошки. Эта связь между представлением и контроллером для обновления класса домена может быть выполнена разными способами.
Ну, я надеюсь, что это имеет смысл, просто поиграйте и получите удовольствие!
Взгляните на [Grails scaffolding] (http://grails.github.io/grails-doc/3.0.x/guide/scaffolding.html), это отличный ресурс, чтобы понять, как работает Grails. – Alidad