gpt4 book ai didi

grails - 删除项目后如何保持查询结果?

转载 作者:行者123 更新时间:2023-12-02 15:28:21 24 4
gpt4 key购买 nike

在我的Grails应用程序中,我有多个页面,这些页面列出了表内的一组数据对象。在这些页面中,我提供了搜索功能,当执行该功能时,该功能将调整表以仅显示与查询匹配的数据对象。但是,如果用户决定删除这些数据对象之一,则应用程序会将它们带回到显示所有内容的默认表中。我希望查询结果在执行删除后保持不变。

我将使用“技能评估”页面作为本文的示例。

这是 Realm 类中的相关代码

技能评估

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 View 文件的相关部分



list.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类中的相关代码

SkillEvalController.groovy
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")
}

在删除查询项目之一后,如何使 View 保留查询结果?

最佳答案

redirect传递给list操作时,您可以提供参数-只需捕获delete操作中的参数(如果有),然后在 Controller 操作结束时将其传递给list的重定向调用即可。

(更新:忘记了actionSubmit不接受params作为属性,因此从this SO answerthe Grails docs拼凑了这个解决方案)

例:

// 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])
}

关于grails - 删除项目后如何保持查询结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24311131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com