在我的Grails应用程序中,我有多个页面列出了表格内的一组数据对象。在这些页面中,我提供了一个搜索功能,在执行时将调整表格以仅显示与查询匹配的数据对象。但是,如果用户决定删除其中一个数据对象,应用程序将把它们带回到显示所有内容的默认表中。我希望在执行删除后查询结果保持不变。
我将使用我的“技能评估”页面作为本文中的示例。
以下是域类
中的相关代码class SkillEval {
static hasMany = [lines: SkillEvalL, courses: CourseOffering, choiceLabels: ChoiceLabel]
String name
String formVersion
static def search(params) {
def criteria = SkillEval.createCriteria()
def results = criteria.list(params) {
or {
ilike("name", params.search+'%')
}
}
return results
}
}
gsp视图文件的相关部分
<g:form>
<div class="search">
<label for="searchField">Search:</label> <input type="text"
id="searchField" name="search" value="${params.search}" /> <input
type="submit" value="Search" />
</div>
<br>
<table id="mainTable">
<thead>
<tr>
<th>Name</th>
<th>Version</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<g:each var="eval" in="${skillEvalList}">
<tr>
<td>
<strong>
${eval.name}
</strong>
</td>
<td>
${eval.formVersion}
</td>
<td>
<g:actionSubmit value="Delete" controller="skillEval" action="delete" onclick="setId(${eval.id});return confirm('Are you sure?');" class="delete" />
</td>
</tr>
</g:each>
</tbody>
</table>
<g:if test="${(skillEvalCount/maxCount) > 1}">
<div class="pagination">
<g:paginate action="list" total="${skillEvalCount}" />
</div>
</g:if>
<input id="evalId" type="hidden" name="id" value="" />
</g:form>
</div>
<r:script>
function setId(id)
{
$('#evalId').val(id);
}
</r:script>
Controller类中的相关代码
def 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")
}
删除其中一个查询项后,如何让视图保留查询结果?
答案 0 :(得分:1)
redirect
list
操作后,您可以提供参数 - 只需捕获delete
操作中的参数(如果有),并在重定向调用中将其传递给{{ 1}}在控制器动作结束时。
(更新:忘记actionSubmit不接受params作为属性,因此从this SO answer和the Grails docs拼凑出这个解决方案
示例:
list