在我的Grails应用程序中,有多个页面列出了一个表内的一组数据对象。在这些页面中,我提供了一个搜索函数,该函数在执行时将调整表以仅显示与查询匹配的数据对象。但是,如果用户决定删除这些数据对象中的一个,应用程序将把它们带回到显示所有内容的默认表中。我希望查询结果在执行删除后保持完整。
我将以我的"技能评估"页面为例。
以下是域类 中的相关代码<标题> SkillEval.groovy h1> gsp视图文件的相关部分 <标题><标题>外h1> P_2Controller类中的相关代码
h1 h2 <> <> SkillEvalController.groovydef delete(Long id) {
def skillEval = SkillEval.get(id)
if (skillEval) {
def allInstances = SkillEvalI.findAllByForm(skillEval)
allInstances.each { evalInstance ->
evalInstance.lines.clear()
if(!evalInstance.delete()) {
println "Failed to delete skill eval instance"
}
else {
println "Instance successfully deleted."
}
}
try {
skillEval.delete(flush: true)
}
catch (DataIntegrityViolationException e) {
}
}
redirect(action: "list")
}
如何在删除查询项后使视图保留查询结果?
当您redirect
到list
动作时,您可以提供参数-只需捕获delete
动作中的参数(如果有的话),并在控制器动作结束时将它们传递给list
的重定向调用。
(更新:忘记actionSubmit不接受参数作为属性,所以从这个so答案和Grails文档中拼凑了这个解决方案)
的例子:
// View (list.gsp)
<g:actionSubmit action="deleteWithParams" value="Delete" ... />
// Controller
def list() {
def deleteWithParams = { forward(action:'delete', params:[search: params?.search]) }
render...
}
def delete(Long id) {
// Deleting the skillEval ...
redirect(action: "list", params: [search: params?.search])
}