Grails - Как правильно настроить события / действия? - PullRequest
0 голосов
/ 20 июля 2011

Я очень новичок в Grails, так что извините, то, что я хочу сделать, может быть совершенно очевидно для другихЭто поможет мне понять Грааля и то, как основная магия работает (или не работает).Ответы должны быть в Groovy / Grails, без javascript, так как я понимаю, как работает javascript.

Допустим, у меня есть файлы:

User.groovy
UserController.groovy

Я использую строительные леса для CRUD записей в USERТаблица.Теперь я хочу немного его настроить.

в файле User.groovy :

class User {
    String name
    static constraints = {
        name blank: false
    }
}

Я хочу UserController.groovy (Этофайл, который я должен отредактировать?), чтобы проверить, является ли введенное имя пользователя Биллом, затем автоматически замените имя пользователя на Уильяма, затем продолжайте создавать запись в базе данных.

В веб-форме я вписываю в поле имени: Билл и нажимаюОТПРАВИТЬ

После того, как база данных обновлена, я проверяю запись и имя пользователя должно быть Уильямом в таблице базы данных USER.

Вопрос № 1 (базовый) Как я могусделать это?

Теперь для чего-то немного сложнее, что, если после того, как запись Уильяма будет создана в БД # 1, и я хочу подключиться к другому БД № 2 и вставить Уильяма втам есть таблица USER?

Итак, когда я нажимаю SUBMIT один раз, обе записи будут вставлены в 2 разные базы данных почти одновременно?Что это действие будет делать, это вставить запись в базу данных № 1, затем подключиться к базе данных № 2, а затем сделать ту же вставку в последовательном.

Вопрос № 2 (средний) Где я смотрюв папках / файлах Grails, чтобы изменить это поведение действия?

Ответы [ 4 ]

2 голосов
/ 20 июля 2011

Вы должны создать вид, связанный с вашим контроллером.В этом представлении вы должны создать форму, которая позволит пользователям вводить имя пользователя, что-то вроде этого:

<g:form controller="user" action="save">
    <g:textField name="username"/>
    <g:submitButton name="save" value="save"/>
</g:form> 

Теперь, когда пользователь вводит форму, вызывается действие сохранения пользовательского контроллера.Все параметры, которые были переданы в действие контроллера, хранятся в карте params.Итак, в вашем действии сохранения вы можете получить доступ к username следующим образом:

def save = {
        def user = new User(username: params.username)
        // OR
        def user = new User(params)
        // you can change username like so
        user.username = "William"

        user.save()
    }

Это очень быстрый пример, я советую вам изучить документацию и, возможно, некоторые учебные пособия, которые дадут вам больше знаний обо всех концепцияхи инструменты, которые Grails предоставляет для вас.

При записи пользователя в две базы данных существует небольшая проблема.Grails не предоставляет возможности иметь несколько баз данных, подключенных к вашему приложению из коробки.Существует плагин под названием Источники данных , который позволяет вам определять несколько источников данных в вашем приложении, но недостатком является то, что вы должны определить, какие классы домена подключены к какому источнику данных.Таким образом, вы не можете иметь класс домена пользователя для своей первичной базы данных и вторичной, вам нужно создать два класса домена, по одному для каждого источника данных.

1 голос
/ 20 июля 2011

Я просто отвечу на основную :)

Да, вы можете сделать это в UserController.groovy. Скажем, у вас есть эта форма:

<g:form action="someAction" method="post">
    <input type="text" name="name" ... />
    ...
</g:form>

В контроллере вы можете выполнить подобное действие (существует несколько возможных подходов):

def someAction = {
    def nameVar = params.name // get the text this way

    // process nameVar here
}

Что касается доступа к базе данных ... зависит от того, как вы хотите приблизиться к ней. Grails предлагает вам сделать что-то вроде:

User theUser = //get the user
theUser.name = //the value
theUser.save(flush:true)

Однако я не раз сталкивался с некоторыми проблемами в Hibernate, поэтому я не всегда использую этот подход. Вместо этого я делаю обычное Java-подобное программирование, например:

...
theUser.executeUpdate("UPDATE <table_name> ...")
theUser.save(flush: true)
...

Тогда просто выберите из базы

...
User.executeQuery("SELECT ...")
...

Надеюсь, это поможет;)

0 голосов
/ 22 августа 2013

Q1: Это действительно работа для GORM Hibernate событий, поскольку она включает в себя ограничение бизнес-логики для вашего домена.

beforeInsert(){
  this.name = "William"
}

Q2: Использование нескольких источников данных интегрирован в Grails 2.0.Нет необходимости в плагине.

0 голосов
/ 20 июля 2011

Для Q # 1 вы должны изменить функцию сохранения в вашем контроллере.Там вы можете проверить параметры для определенного имени пользователя или изменить новый созданный объект пользователя, как вам нравится.

Для Q # 2 я рекомендую вам взглянуть на плагин Источники данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...