我在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
字段。任何帮助将不胜感激,并为冗长而感到遗憾。
答案 0 :(得分:1)
回答您在评论回复中提出的问题。您可能希望在控制器中使用chain进行调查。如果模型中尚未存在新的loadInstance,则需要稍微重新创建一个create action。但是,这应该可以解决问题。