我有一个选择字段来选择部门。我想实现一个视图,显示在该部门工作的员工列表。我想在同一页面(视图)中显示选择字段和员工列表。如何将选定的字段参数发送到同一个控制器并更新employees对象列表并在同一页面中显示列表。
答案 0 :(得分:4)
部分页面更新有三个主要部分。我将通过一些示例概述每个部件的组成方式。这应该让你开始正确的道路。我不得不做出很多假设,因为你的问题很清楚细节。但是,您应该能够获取此信息并编写您赢得的实现。
这涉及监视选择列表以进行更改并将所选选项的值发送到控制器。 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>
第二部分是我们用于获取员工列表的控制器代码。这只是它可能是什么样子的一个例子。请注意,我们将渲染模板而不是视图。这非常重要,因为我们不希望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
}
...
}
最后,我们的模板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>
当然,您的实施细节我会有很大不同,但总体概念应该是相同的。这只涉及到主要部分,并留下了许多细节,如微调器,取消请求等。