Grails 动态显示实现(部分页面更新)



我有一个选择字段来选择部门。我想实现一个视图,该视图显示在该部门工作的员工列表。我想在同一页面(视图)中同时显示选择字段和员工列表。如何将选定的字段参数发送到同一控制器并更新员工对象列表并在同一页面中显示列表。

部分页面更新有三个主要部分。我将通过一些示例向您概述每个部分的组成方式。这应该会让你开始走上正确的道路。我不得不做很多假设,因为你的问题对细节很轻。但是,您应该能够获取此信息并编写赢得的实现。

第 1 部分(提出请求)

这涉及监视选择列表的更改,并将所选选项的值发送到控制器。JQuery非常适合这一点。我将假装选择列表的 id 为"DepartmentId",我们想将员工列表的内容放入 id 为"displayList"的元素中。

<script type='text/javascript'>
<!--
  (function() {
    $("#departmentId").on("change", function() {
      $.get("${g.createLink(controller: 'employeee', action: 'listForDepartment')}/"+$(this).val(), function(data) {
        $("#displayList").html(data);
      });
    });
  })();
// -->
</script>

第 2 部分(满足请求)

第二部分是用于获取员工列表的控制器代码。这只是它的外观的一个例子。请注意,我们将呈现模板而不是视图。这非常重要,因为我们不希望Grails(Sitemesh)将任何布局应用于结果。

class EmployeeController {
  ...
  def listByDepartment() {
    def model = [:]
    model['department'] = Department.get(params.id)
    model['employees'] = Employee.findAllByDepartment(model['department'])
    render template: 'employeeListForDepartment', model: model
  }
  ...
}

第 3 部分(在模板中显示结果)

最后,我们的模板grails-app/views/employee/_employeeListForDepartment.gsp将显示该部门的员工。由于我们使用了员工控制器,因此模板位于员工视图中,所有模板都以下划线开头。

<h1>Employees for ${department.name}</h1>
<ul>
<g:each in="${employees}" var="employee">
  <li>${employee.name}</li>
</g:each>
</ul>

当然,您的实现细节非常不同,但整体概念应该是相同的。这只是触及了其中的主要部分,并遗漏了许多细节,例如微调器、取消请求等。