【发布时间】:2013-04-11 06:45:43
【问题描述】:
我想为我的表添加一个数据过滤器。有人可以帮助我吗? 我已经为列表控制器编写了代码,但我没有 知道如何在我的 .gsp 文件中实现“mitarbeiterSelectedId”。
目前我有以下代码sn-ps。
这是我的控制器“列表”
def list(Integer max) {
def mitarbeiterList = Mitarbeiter.listOrderByNachname()
if (params.selectedMitarbeiterId != null && params.selectedMitarbeiterId != '-1'){
mitarbeiterList = [Mitarbeiter.findById(params.selectedMitarbeiterId)]
}
[mitarbeiterInstanceList: mitarbeiterList, mitarbeiterInstanceTotal: Mitarbeiter.count() ]
}
这是我的列表.gsp
<g:select id="mitarbeiter" name="mitarbeiterId" from="${Mitarbeiter.list()}" optionValue="nachname"
optionKey="id"
noSelection="${['-1': 'Bitte auswählen...']}" onchange="selectedMitarbeiterId"/>
<g:actionSubmit value="submit" onclick="" >OK</g:actionSubmit>
<table>
<thead>
<tr>
<g:sortableColumn property="nachname" params="[controller: 'mitarbeiter']"
title="${message(code: 'mitarbeiter.nachname.label', default: 'Nachname')}"/>
<g:sortableColumn property="vorname" params="[controller: 'mitarbeiter']"
title="${message(code: 'mitarbeiter.vorname.label', default: 'Vorname')}"/>
<g:sortableColumn property="sollpensum" params="[controller: 'mitarbeiter']"
title="${message(code: 'mitarbeiterHistory.sollpensum.label', default: 'Sollpensum')}"/>
<sec:ifAllGranted roles="ROLE_ADMIN">
<g:sortableColumn property="gehalt" params="[controller: 'mitarbeiter']"
title="${message(code: 'mitarbeiterHistory.gehalt.label', default: 'Gehalt')}"/>
</sec:ifAllGranted>
<th><g:message code="mitarbeiterHistory.bereich.label" default="Bereich"/></th>
</tr>
</thead>
<tbody>
<g:each in="${Mitarbeiter.list()}" status="i" var="mitarbeiterInstance">
<tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
<td><g:link action="show" controller="mitarbeiter"
id="${mitarbeiterInstance.id}">${fieldValue(bean: mitarbeiterInstance, field: "nachname")}</g:link></td>
<td>${fieldValue(bean: mitarbeiterInstance, field: "vorname")}</td>
<td>${fieldValue(bean: mitarbeiterInstance.histories, field: "sollpensum")}</td>
<sec:ifAllGranted roles="ROLE_ADMIN">
<td>${fieldValue(bean: mitarbeiterInstance.histories, field: "gehalt")}</td>
</sec:ifAllGranted>
<td>${fieldValue(bean: mitarbeiterInstance.histories, field: "bereich")}</td>
</tr>
</g:each>
</tbody>
</table>
有人可以帮我解决这个问题吗?
编辑:
好的,现在我的班级看起来像这样。
class Employee{
String firstname
String lastname
static hasMany = [histories:EmployeeHistory]
static constraints = {
firstname nullable: false, blank: false, minSize: 2, matches: "[a-zA-ZäöüÄÖÜßéèáàúùóò'\\- ]+"
lastname nullable: false, blank: false, minSize: 2, matches: "[a-zA-ZäöüÄÖÜßéèáàúùóò'\\- ]+"
}
}
所以当我插入你的代码时,它看起来像这样:
class Employee{
String firstname
String lastname
static hasMany = [histories:EmployeeHistory]
static constraints = {
firstname nullable: false, blank: false, minSize: 2, matches: "[a-zA-ZäöüÄÖÜßéèáàúùóò'\\- ]+"
lastname nullable: false, blank: false, minSize: 2, matches: "[a-zA-ZäöüÄÖÜßéèáàúùóò'\\- ]+"
}
static namedQueries = {
filteronLastname { String inLastname ->
if (inLastname && inLastname?.size() > 0) {
ilike 'lastname', "%${inLastname}%"
}
}
}
}
如果在下拉列表中未选择任何内容,我想显示整个表格数据。
如果我在下拉列表中选择一名员工,我只想显示包含所选员工数据的表格。
目前这是我的员工列表控制器
def list() {
params.max = Math.min(params.max ? params.int('max') : 10, 100)
def employeeList = Employee.filteronLastname(params?.lastName).list(params)
[employeeInstanceList: employeeList, employeeInstanceTotal: employeeList.totalCount ]
}
我必须在哪里插入这个:
NewsItem.filterLastname(params?.Lastname).
list()
以及如何更改<g:selected>?
【问题讨论】:
-
'?.'是一个安全导航操作符,这是一种时髦的语法。因此,您可以像这样使用 namedQuery: Employee.filteronLastname(params?.lastname).list(params) 这将为您提供应用了过滤器的员工。指某东西的用途 '?。'如果 params.lastname 未填充且为空,将确保您不会获得空指针。
-
对不起,我没明白。你能编辑一下代码 sn-ps 吗?
-
我编辑了代码,但不确定下拉框想要什么。在示例中,我假设您将拥有一个 g:textbox,其中可以包含您正在搜索的员工姓名的一部分。你能贴一下你的gsp代码吗?
-
我想要一个显示员工姓氏的下拉框。当我在 Dropbox 中选择一名员工时,我想更新表格。我只想显示选定的员工。你知道我的意思吗?