2015-04-24 2 views
0

Я пытаюсь выполнить стандартный поток с добавлением сущности в DB. Поток должен выглядеть следующим образом:Как правильно привязать данные в Grails

  1. Пользователь открывает ссылку example.co/connection/putForm
  2. редактировать все поля
  3. представить (POST) в example.co/connection/put
  4. если ошибок нет, то он перенаправляется на ../conncetion/index, иначе он должен увидеть предыдущую форму со всеми заполненными полями (шаг 2) и сообщение об ошибке

На данный момент мой код выглядит следующим образом:

def putForm() { 
    [ 
      providers: Provider.findAll(), 
      cities : City.findAll() 
    ] 
} 

@Transactional 
def put() { 
    // not important part of parsing fields from params 
    def provider = Provider.get(params.provider) 
    def startTime = parseStartTime(params) 
    def path = parsePath(params) 
    def departurePlace = params.departurePlace 

    def connection = new Connection(provider: provider, startTime: startTime, departurePlace: departurePlace, path: path) 
    if (connection.save()) { 
     redirect controller: 'connection', action: 'index', params: [addedConnection: connection.id] // this part is OK 
    } else { 
     render view: 'putForm', params: params, model: [connection: connection] // this sucks... look below 
    } 
} 

Проблема заключается в том, что мне нужно сделать вид putForm но из ссылки .../подключение/ставить. Эта причина проблемы, что после этого визуализировать все текстовые поля пусты (шаг 4 выше). Также у меня есть уродливая ссылка.

Есть ли у Grails какой-либо шаблон для этой общей ситуации?

PS Я не могу использовать строительные леса.

+0

Его трудно дать окончательный ответ, так как все его предположения, не видя полного содержимого put + putForm. Что произойдет, если вы визуализируете представление «put» (сам), появляются ли поля? Если это так, на 100%, что определения значений в put и putForm идентичны, попробуйте выполнить проверку смены страниц, а также добавьте $ {params} ----
$ {connection} ----
наверху обеих страниц .. просмотрите их вывод, если они идентичны, то проблема на вашем putForm gsp – Vahid

ответ

1

Ты не так далеко .. попробуйте это:

def putForm() { 
    [ 
      providers: Provider.findAll(), 
      cities : City.findAll(), 
connection: new Connection() // everything defaulted to empty or whatever you want the default to be 
    ] 
} 

@Transactional 
def put(Connection connection) { 
    // NOTE: by putting the connection as the parameter to this action, 
    // all params.X that match a property X in the connection will auto- 
    // populate, even the Provider, assuming the value of params.provider.id 
    // is the id of a provider or blank (in which case 
    // connection.provider will be null. 

    // Skip this now 
    //def provider = Provider.get(params.provider) 
    //def startTime = parseStartTime(params) 
    //def path = parsePath(params) 
    //def departurePlace = params.departurePlace 
    //def connection = new Connection(provider: provider, 
    // startTime: startTime, departurePlace: departurePlace, path: path) 

    if (connection.save()) { 
     redirect controller: 'connection', action: 'index', 
      params: [addedConnection: connection.id] // this part is OK 
    } else { 
     render view: 'putForm', model: [ 
      providers: Provider.findAll(), 
      cities : City.findAll(), 
      connection: connection] 
    } 
} 

Что вам нужно сейчас, чтобы убедиться, что ваш putForm.gsp фактически использует значения, спущенные. Вы должны поместить в таких вещах, как:

<g:input name="path" type="text" 
     value="${fieldValue(bean:connection, field:'path')}" /> 

и

<g:select name="provider.id" from="${providers}" // note the .id in places here 
      value="${connection.provider?.id ?: ''}" 
      noSelection="['':'None']"/> 

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

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

+0

Спасибо, Grails - отличная инфраструктура, но вам нужно знать все шаблоны: D – MAGx2

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