Я использую атрибут noSelection
в теге <g:select>
поля Account
для моего Load
create
представления. Когда пользователь не делает выбор и нажимает кнопку «Создать», я ожидаю, что текущие значения всех полей формы будут переданы закрытию save
в моем контроллере Load
, который, в свою очередь, повторно вызывает create
просмотреть и заполнить это представление с ранее упомянутыми текущими значениями. Это не происходит для двух полей формы, и мне неясно, почему.
Вот как выглядит Load
create
, вызываемый контроллером /truckingmanagement/load/create
:
Если пользователь не делает выбор в поле Account
и затем нажимает кнопку «Создать», загрузка, очевидно, не может быть создана. Вот как выглядит результирующее представление Load
create
, вызываемое контроллером /truckingmanagement/load/save
:
Итак, у меня есть две проблемы, первая из которых заключается в том, что поле Logged By
во втором представлении не заполняется значением, выбранным в первом представлении. Кроме того, раскрывающийся список полностью пуст, нет пользователей для выбора. Вторая проблема заключается в том, что раскрывающийся список Account
полностью пуст, нет учетных записей для выбора.
Вот теги <g:select>
, используемые для полей Logged By
и Account
в представлении Load
create
.
Logged By
поле:
<g:select name="loggedBy.id" from="${loggedByUsers}" optionKey="id" value="${loadInstance?.loggedBy?.id}" />
Account
поле:
<g:select id="account" name="account.id" from="${accountsWithCargoDestinations}" optionKey="id" noSelection="['':'-Select-']" />
Вот закрытие create
и save
в моем LoadController
:
def create = {
Role role1 = Role.findByAuthority("ROLE_ADMIN")
Role role2 = Role.findByAuthority("ROLE_OFFICE_PROFESSIONAL")
Role role3 = Role.findByAuthority("ROLE_DRIVER")
def loggedByUsers = UserRole.findAllByRoleInList([role1, role2, role3]).user
def loadInstance = new Load()
loadInstance.properties = params
def accountsWithCargoDestinations = Account.findAllByUserInList(Address.findAll("from Address as addresses where addresses.cargoDestination=true").user)
return [loadInstance:loadInstance, loggedByUsers:loggedByUsers, accountsWithCargoDestinations:accountsWithCargoDestinations]
}
def save = {
def loadInstance = new Load(params)
if (loadInstance.save(flush: true)) {
flash.message = "${message(code: 'default.created.message', args: [message(code: 'load.label', default: 'Load'), loadInstance.id])}"
redirect(action: "show", id: loadInstance.id)
}
else {
System.out.println params //Trying to see if any values from the problem fields got lost.
render(view: "create", model: [loadInstance: loadInstance])
}
}
Вы заметите в выражении println
в части else
моего закрытия save
, которое печатает params
. Когда я сделал это, я обнаружил, что значение, выбранное в поле Logged By
в первом представлении, действительно было правильно передано от первого представления до этой точки правильно, но я не знаю, почему оно не отображается, когда Load
create
представление отображается в следующей строке кода или, по крайней мере, почему что-то (то есть loggedByUsers
из контроллера truckingmanagement/load/create
) не заполняет поле Logged By
, когда представление оказано. Буду признателен за любую помощь, и извините за многословие.