grails中的下拉列表
在我的项目跟踪程序中,我有一个表,其中的行对应于项目,列对应于项目的不同信息(名称、截止日期、状态等)。最后一列应该是“More”列,当您按下该列时,它应该显示项目其他属性的下拉列表。在Grails中如何实现这一点? 下面是我的名单。gsp:grails中的下拉列表,grails,drop-down-menu,html-table,gsp,Grails,Drop Down Menu,Html Table,Gsp,在我的项目跟踪程序中,我有一个表,其中的行对应于项目,列对应于项目的不同信息(名称、截止日期、状态等)。最后一列应该是“More”列,当您按下该列时,它应该显示项目其他属性的下拉列表。在Grails中如何实现这一点? 下面是我的名单。gsp: <calendar:resources lang="en"/> <!doctype html> <html> <head> <meta name="layout" conten
<calendar:resources lang="en"/>
<!doctype html>
<html>
<head>
<meta name="layout" content="layoutMain"/>
<g:set var="entityName" value="${message(code: 'project.label', default: 'Project')}" />
<title><g:message code="default.list.label" args="[entityName]" /></title>
</head>
<body>
<div class="nav" role="navigation">
<ul>
<li><g:link class="create" action="create"><button>New Project</button></g:link></li>
</ul>
</div>
<div id="list-project" class="content scaffold-list" role="main">
<h1><g:message code="default.list.label" args="[entityName]" /></h1>
<g:if test="${flash.message}">
<div class="message" role="status">${flash.message}</div>
</g:if>
<table>
<thead>
<tr>
<g:sortableColumn property="name" title="${message(code: 'project.name.label', default: 'Name')}" />
<g:sortableColumn property="dueDate" title="${message(code: 'project.dueDate.label', default: 'Due Date')}" />
<g:sortableColumn property="startDate" title="${message(code: 'project.startDate.label', default: 'Start Date')}" />
<g:sortableColumn property="status" title="${message(code: 'project.name.label', default: 'Status')}" />
<g:sortableColumn property="requirements" title="${message(code: 'project.name.label', default: 'Requirements')}" />
<g:sortableColumn property="design" title="${message(code: 'project.name.label', default: 'Design')}" />
<g:sortableColumn property="development" title="${message(code: 'project.name.label', default: 'Development')}" />
<g:sortableColumn property="qa" title="${message(code: 'project.name.label', default: 'QA')}" />
<g:sortableColumn property="ua" title="${message(code: 'project.name.label', default: 'UA')}" />
<g:sortableColumn property="delivery" title="${message(code: 'project.name.label', default: 'Delivery')}" />
<g:sortableColumn property="more" title="${message(code: 'project.name.label', default: 'More')}" />
</tr>
</thead>
<tbody>
<g:each in="${projectInstanceList}" status="i" var="projectInstance">
<tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
<td><g:link action="show" id="${projectInstance.id}">${fieldValue(bean: projectInstance, field: "name")}</g:link></td>
<td><g:formatDate date="${projectInstance.dueDate}" /></td>
<td><g:formatDate date="${projectInstance.startDate}" /></td>
<td><g:link action="show" id="${projectInstance.id}">${fieldValue(bean: projectInstance, field: "status.name")}</g:link></td>
<td><g:link action="show" id="${projectInstance.id}">${fieldValue(bean: projectInstance, field: "requirements.name")}</g:link></td>
<td><g:link action="show" id="${projectInstance.id}">${fieldValue(bean: projectInstance, field: "design.name")}</g:link></td>
<td><g:link action="show" id="${projectInstance.id}">${fieldValue(bean: projectInstance, field: "development.name")}</g:link></td>
<td><g:link action="show" id="${projectInstance.id}">${fieldValue(bean: projectInstance, field: "qa.name")}</g:link></td>
<td><g:link action="show" id="${projectInstance.id}">${fieldValue(bean: projectInstance, field: "ua.name")}</g:link></td>
<td><g:link action="show" id="${projectInstance.id}">${fieldValue(bean: projectInstance, field: "delivery.name")}</g:link></td>
<td><g:link action="show" id="${projectInstance.id}">${fieldValue(bean: projectInstance, field: "delivery.name")}</g:link></td>
</tr>
</g:each>
</tbody>
</table>
<div class="pagination">
<g:paginate total="${projectInstanceTotal}" />
</div>
</div>
</body>
</html>
- 新项目
${flash.message}
${fieldValue(bean:projectInstance,field:“name”)}
${fieldValue(bean:projectInstance,字段:“status.name”)}
${fieldValue(bean:projectInstance,字段:“requirements.name”)}
${fieldValue(bean:projectInstance,字段:“design.name”)}
${fieldValue(bean:projectInstance,字段:“development.name”)}
${fieldValue(bean:projectInstance,字段:“qa.name”)}
${fieldValue(bean:projectInstance,字段:“ua.name”)}
${fieldValue(bean:projectInstance,字段:“delivery.name”)}
${fieldValue(bean:projectInstance,字段:“delivery.name”)}
如果要使用标准Grails,可以使用标记在Grails中创建下拉列表。一个更漂亮的解决方案可能是使用jQuery(或类似工具)来显示和隐藏HTML块
如果您的项目域看起来像:
class Project {
String name
...
// more info
String attr1
int attr2
boolean isAttr3
}
您可以向域中添加一个方便的方法,将字段聚合到可用于下拉框的列表(或其他对象)中。例如
// utility getter to aggregate the fields into an array
def getMoreInfo() {
[attr1, attr2, isAttr3]
}
然后,您可以在GSP中使用以下内容:
<td><g:select name="more" from="${projectInstance.moreInfo}" /></td>
单击“更多”列,您可以向某个操作发送Ajax请求,该操作可以为您提供两个数组的JSON:
{extraColumns:{c1,c2}, columnValues:{{v11,v12}, {v21,v22}}}
在Ajax的响应中,您可以解析JSON并为标题创建附加列,为行创建附加列值