2015-05-07 6 views
0

Есть ли способ изменить значение в классе домена, если пользователь вводит новое значение? поэтому, если есть страница просмотра, и поле ввода, независимо вводится в поле ввода будет изменять определенное значение в классе доменаКак вы изменяете значение пользователя в классе домена в Grails

для например:

class User { 
    String userName 
} 

в просмотров страницы:

<input type="userName" action="changeUsername"> 
+4

Взгляните на [Grails scaffolding] (http://grails.github.io/grails-doc/3.0.x/guide/scaffolding.html), это отличный ресурс, чтобы понять, как работает Grails. – Alidad

ответ

0

Пожалуйста советоваться алидада в:

Взгляните на 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] } 
     } 
    } 

Что вы можете увидеть делает некоторые проверки, чтобы убедиться, что экземпляр существует и не имеет ошибок (который базируется подтверждения, которое вы добавляете в свой класс домена), затем сохраняет обновленный экземпляр пользователя и затем возвращает сообщение. Также хорошей практикой является перенос «работы» из вашего контроллера и в класс обслуживания.

Но есть много разных способов кожи кошки. Эта связь между представлением и контроллером для обновления класса домена может быть выполнена разными способами.

Ну, я надеюсь, что это имеет смысл, просто поиграйте и получите удовольствие!

Смежные вопросы