Почему леса Grails создают параметры action action? - PullRequest
0 голосов
/ 27 декабря 2011

Я создал статический каркас для своего класса домена и получил контроллер для этого класса домена.Действие контроллера create выглядит следующим образом:

def create() {
    [userInstance: new User(params)]
}

Интересно, почему была добавлена ​​строка:

[userInstance: new User(params)]

.Очевидно, что когда вызывается действие create, никакого params не будет - так зачем была добавлена ​​эта строка?

Ответы [ 3 ]

6 голосов
/ 27 декабря 2011

Очевидно, что когда вызывается действие create, не будет никаких params

Не обязательно - представьте ситуацию, когда вы хотите предварительно заполнить пару полей в виде представления создания. Вы можете использовать:

/app/user/create?username=myusername

В результате в представлении userInstance будет заполненное поле имени пользователя для отображения в форме.

3 голосов
/ 28 декабря 2011

По сути, это Spring, действие называется «связывание» и представляет собой действие связывания элементов формы из одного jsp (в данном случае gsp) со свойствами объекта и наоборот.

Чтобы связать объект с формой, сначала вы должны его создать. Как можно связать нулевой объект? это невозможно, поэтому новый ClassObject (...)

После этого в Groovy у нас есть POGO, и одной из особенностей POGO является возможность инициализировать их с помощью карты, например:

new User(name:'John',lastname:'Zuñiga')

Но в этом случае есть немного отличной магии с этим объектом "params". Это происходит от Groovy Servlets или Groovlets. Как вы можете получить параметр с Java, входящий из формы? Хорошо, с request.getParam("param_name"), но в этом случае с Groovy вы получаете объект params, этот объект params является картой, картой Groovy ... Хм, одна секунда ...

Если POGO в Groovy может получать Map в качестве конструктора, а объект params является Map ... может быть ... ох, круто, я могу поместить эту карту в конструктор моего объекта, а после Spring сделать привязку в форму с этим новым объектом, так что этот объект перемещается в действиях от этого контроллера, поэтому он поставляется с заполненными свойствами.

Надеюсь, это объяснение будет ясным, если у вас есть вопросы, я здесь ... Привет

2 голосов
/ 27 декабря 2011

Там может быть параметрами, хотя в общем случае их не будет.

Это позволяет предварительно загружать значения, которые иногда могут быть полезны, включая повторное отображение формы создания.

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