如何在删除项目后保留查询结果?

时间:2014-06-19 16:01:05

标签: grails groovy gsp

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

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

以下是域类

中的相关代码

SkillEval.groovy

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

        

的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")
}


删除其中一个查询项后,如何让视图保留查询结果?

1 个答案:

答案 0 :(得分:1)

redirect list操作后,您可以提供参数 - 只需捕获delete操作中的参数(如果有),并在重定向调用中将其传递给{{ 1}}在控制器动作结束时。

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

示例:

list