Grails - 如何从视图向控制器发送一个ID(多对多关系)

时间:2015-12-28 16:32:07

标签: grails many-to-many parameter-passing grails-2.4

我正在尝试发送一个迭代项的ID,但我认为整个列表正在发送。我怎样才能发送一个ID? 我有STUDENTCOURSE域类。

域模型

class Student {
    String fullName
    String toString() {
        "$fullName"
    }

    static belongsTo = [school: School]
    static hasMany = [courses:Course, studentCourses:StudentCourse]
}

class Course {
    String course
    String toString() {
        "$course"
    }

    static hasMany = [studentCourses:StudentCourse]
    static belongsTo = Student

}

class StudentCourse {
    Student student
    Course course

    //Some methods...
}

这是我的编辑视图。

<g:if test="${studentInstance.studentCourses?.course}">
        <g:each class="courseList" in="${studentInstance.studentCourses?.course}" var="courses">
            <li class="courseList">
                <span class="courseList" aria-labelledby="courses-label">${courses.id} ${courses}
                <g:actionSubmitImage class="deleteIcon" action="deleteCourse" value="delete"
                 src="${resource(dir: 'images', file: 'delete.png')}" height="17"
                 onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Are you sure?')}');"
                 params="${courses.id}"/></span>
            </li>
        </g:each>
    </g:if>

当用户点击delete.png图片时,我希望能够从列表中删除一个课程。但是当我println params.course时,参数作为整个列表发送,而不是作为列表中的单个项目发送,即使它在g:each标记内。如何将一个相应的项目发送到控制器?

我的编辑页面有一系列课程。

Course 23  English (delete icon here)
       42  Science (delete icon here)
       67  Math (delete icon here)

在我的println params.course这就是我所看到的。

[ English, Science, Math ]

当用户点击[English]行旁边的删除按钮时,如何才能English

提前谢谢。

1 个答案:

答案 0 :(得分:3)

据我了解你的问题,问题应该出在你的taglib

我给你的是类似代码的例子,这是有效的。

<g:each in="${student?.studentCourses?.course}" var="course">
<div>
    <span>${course.id} ${course.course}</span>
    <g:link controller="login" action="delete" params="[courseId:course.id]">
        Delete
    </g:link>
</div>

在此代码块中,点击删除链接参数 params =“$ {[id:course.id]} ,它将重定向到登录控制器内的删除操作。在删除操作中打印参数,您将获得输出 params:[courseId:2,action:delete,format:null,controller:login] 在这里,您可以看到 params.courseId 只是长值而不是列表。

希望它能帮助您理解您的问题。