Grails 当用户将表单字段留空时,使用正确的参数重新呈现视图时出现问题
我正在为我的Grails 当用户将表单字段留空时,使用正确的参数重新呈现视图时出现问题,grails,groovy,Grails,Groovy,我正在为我的加载创建视图使用帐户字段的标记中的noSelection属性。当用户未进行选择并单击“创建”按钮时,我希望所有表单字段的当前值都会传递给我的Load控制器中的save闭包,该控制器反过来会重新调用Create视图,并用前面提到的当前值填充该视图。我的两个表单字段没有出现这种情况,我不清楚原因 以下是由/truckingmanagement/Load/create控制器调用的Loadcreate视图的外观: 如果用户没有在帐户字段中进行选择,然后继续单击“创建”按钮,则显然无法创建加
加载创建视图使用帐户字段的标记中的noSelection
属性。当用户未进行选择并单击“创建”按钮时,我希望所有表单字段的当前值都会传递给我的Load
控制器中的save
闭包,该控制器反过来会重新调用Create
视图,并用前面提到的当前值填充该视图。我的两个表单字段没有出现这种情况,我不清楚原因
以下是由/truckingmanagement/Load/create
控制器调用的Load
create
视图的外观:
如果用户没有在帐户
字段中进行选择,然后继续单击“创建”按钮,则显然无法创建加载。以下是由/truckingmanagement/Load/save
控制器调用的结果加载
创建
视图的样子:
所以我这里有两个问题,第一个问题是第二个视图中的Logged By
字段没有填充第一个视图中选择的值。此外,下拉框完全为空,没有用户可供选择。第二个问题是,账户
字段下拉框完全为空,没有可供选择的账户。
以下是用于加载创建视图中的记录者和帐户字段的
标记
记录人
字段:
<g:select name="loggedBy.id" from="${loggedByUsers}" optionKey="id" value="${loadInstance?.loggedBy?.id}" />
<g:select id="account" name="account.id" from="${accountsWithCargoDestinations}" optionKey="id" noSelection="['':'-Select-']" />
以下是myLoadController
中的创建
和保存
闭包:
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])
}
}
您将在mysave
闭包的else
部分的println
语句中注意到,该语句打印出参数。当我这样做时,我发现在第一个视图中的“记录者”字段中选择的值确实从第一个视图一直正确地传递到了这一点,但我不知道为什么在下一行代码中呈现“加载”
创建”
视图时不显示该值,或者至少不知道为什么会显示某些内容(即来自卡车管理/装载/创建控制器的日志数据库用户
)在呈现视图时,不填充“日志记录者”字段。如果需要任何帮助,我们将不胜感激,并对其冗长表示歉意。回答您在评论回复中提出的问题。您可能希望调查控制器中的使用情况。如果需要,您需要重新执行创建操作,以仅实例化一个新的loadInstance尚未出现在模型中。但是,这应该可以解决问题。要回答您在评论回复中提出的问题,您可能需要调查控制器中的使用情况。您需要稍微重新执行创建操作,以便仅实例化模型中尚未出现的新loadInstance。但是,这应该可以解决问题 我可能在这里漏掉了一些简单的东西,但是你的错误返回的模型不是恰好漏掉了loggedByUsers和accountsWithCargoDestinations吗?@Joshua Moore,没有,你没有漏掉任何东西,但显然我漏掉了,因为这似乎已经修复了它。但是为了干净的代码,我如何/在哪里放置loggedByUsers
和accountsWithCargoDestinations
定义,这样我就不必在两个不同的闭包(即创建
和保存
闭包)中使用完全相同的代码了?我这样问是因为只需将映射放在我的保存
闭包的模型中(如您所建议的)没有做到这一点,我不得不从create
闭包中复制相关的代码。我可能在这里遗漏了一些简单的东西,但是你的错误返回的模型不是恰好遗漏了loggedByUsers和accountsWithCargoDestinations吗?@Joshua Moore,没有,你没有遗漏任何东西,但显然我遗漏了,因为这似乎有e修复了它。但是为了代码干净,我如何/在哪里放置loggedByUsers
和accountsWithCargoDestinations
定义,这样我就不必在两个不同的闭包(即create
和save
闭包)中使用完全相同的代码了?我这样问是因为我只是将映射放在我的save
闭包的模型中(如您所建议的)没有做到这一点,我不得不从create
闭包中复制相关代码。我阅读了chain
方法,但实际上我选择了编写可重用服务的路线……似乎更适合。现在我可以在任何地方用一行代码调用我的服务。我会选择您的答案,因为您需要我会在评论中回答我的问题。再次感谢!我阅读了chain
方法,但实际上我选择了编写可重用服务的方式……似乎更适合。现在我可以在任何地方用一行代码呼叫我的服务。我会选择你的答案,因为你在评论中回答了我的问题。谢谢再一次!