Значения формы из представления создания не передаются в представление сохранения - PullRequest
0 голосов
/ 01 сентября 2011

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

Проблема заключается в том, что значения «Cargo Destination» и «Cargo Source», введенные в представлении create, не отображаются в представлении save. Например, когда пользователь забывает введите необходимый бит информации в представлении create и нажмите кнопку «Создать», значения, введенные пользователем, должны отобразиться в представлении save. Все поля, кроме «Назначение груза» и «Источник груза», отображаются в представлении save, когда происходит этот сценарий.

Когда я помещаю оператор println в мой контроллер save, я вижу, что рассматриваемые параметры действительно достигли контроллера save из представления create.

Эти два поля связаны с другими полями и заполнены AJAX, который идет к замыканию в контроллере Load. Я полагаю , что это закрытие, где моя проблема, в выражении render:

def getAccountUserCargoDestinations = {
    if(params.id == ""){
        render g.select(name: 'cargoDestination.id')
        return
    }
    def user = Account.find("from Account as account where account.id=:id", [id:Long.valueOf(params.id)]).user
    def addresses = Address.find("from Address as addresses where addresses.user=:user and addresses.cargoDestination=true", [user:user])
    render g.select(optionKey: 'id', from: addresses,  name: 'cargoDestination.id')
}

Если проблема не в этом, то, вероятно, она находится в соответствующем поле самого представления create:

<g:select name="cargoDestination.id" optionKey="id" value="${loadInstance?.cargoDestination?.id}" />

Еще две вещи:

1.) Grails не дает мне никаких ошибок

2.) A cargoDestination и cargoSource являются экземплярами класса Address, который я создал.

Буду признателен за любую помощь.

UPDATE:

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

  <g:if test="${loadInstance?.cargoDestination?.id != null}">
    ${loadInstance?.cargoDestination}
  </g:if>

Поступая таким образом, я вижу, что параметр проходит весь путь до представления create, когда он вызывается замыканием save. Я думаю, я мог бы использовать <g:if> tags to get the desired results, but that just seems messy, and I doubt that is the "correct" way to solve this problem. I also wrapped my AJAX in a similartag to make sure it was not changing the field value when the сохранить closure rendered the создать view, and I can confirm that the AJAX is indeed not changing the field value. Other than the AJAX, the only thing different about my problem fields is that I do not have a из attribute in their corresponding `тегов (как видно из кода, который я опубликовал в этом вопросе). Я знаю, что решение простое ... Что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 02 сентября 2011

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

Все, что мне нужно было сделать, это добавить атрибут from к затронутым тегам <g:select>, например:

<g:select from="${loadInstance?.cargoDestination}" name="cargoDestination.id" optionKey="id" value="${loadInstance?.cargoDestination?.id}" />

Работает точно так же, как и ожидалось.

0 голосов
/ 01 сентября 2011

Эти два поля связаны с другими полями и заполнены AJAX, который идет к замыканию в контроллере нагрузки.

hm.Сохранен ли объект между ними?Он читает, как будто

  • данные отправляются на контроллер save, который не сохраняет, поскольку отсутствуют поля
  • контроллер сохранения отображает представление save и println это поле (которое доступно для контроллера)
  • представление вызывает контроллер load, который пытается получить два поля из объекта, который еще не сохранен.Нет связи с промежуточными данными запроса контроллера * 1016. *

Если проблема не в этом, я думаю, вам придется опубликовать больше кода, чтобы проанализировать вашу проблему.

хм.просто взглянул на ваш другой вопрос.Я не вижу возможности для контроллера Ajax load получить данные, поскольку контроллер save не сохранил данные в базе данных.

Почему бы вам не вывести эти значения напрямую через saveпосмотреть

...