我的Grails应用使用的是版本2.3.6
在这个应用程序中有一个Controller类:
class UserOrderController {
def index(Integer max) {
params.max = Math.min(max ?: 20, 100)
respond UserOrder.list(params), model:[userOrderInstanceCount: WorkOrder.count()]
}
}
现在在另一个Controller中,我正在访问 UserOrder 对象并根据产品ID进行过滤。产品ID是UserOrder域类中的字符串属性。
另一个控制器是:
class UserOrderFilterController {
def getUOBasedOnID () {
// Here i get a new list for **UserOrder**
// Now i want to draw the UserOrderController page with the new list
}
}
我是Grails的新手,不知道如何做到这一点。
我应该在UserOrderController类中创建一个新的INDEX函数并传递新列表吗?
如下所示:
class UserOrderController {
def index(Integer max) {
params.max = Math.min(max ?: 20, 100)
respond UserOrder.list(params), model:[userOrderInstanceCount: userOrder.count()]
}
def index(List UserOrder) {
// create page???
}
}
更新
UserOrderFilterController 拥有自己的 index.gsp 文件。 我们正在做的是:访问UserOrder域类的所有对象并根据属性过滤它们。
现在在 UserOrderFilterController 的index.gsp中,我将显示找到的对象/订单总数。此数字将使用 href 显示一个超链接,当用户点击它时,它将转到 UserOrderController 的 index.gsp 页面仅显示已过滤的 UserOder 。
所以我期待的是:
<a href='${createLink(controller:'UserOrder', action:'index')}'>%s</a>
href ,如上所示,参数字段将包含 UserOrder 的过滤列表。
我不知道如何将params / list添加到 href 。这可能吗?
答案 0 :(得分:1)
Grails中的每个action
都有匹配的view
。复制动作是在寻找麻烦。如果您有一些值得拥有自己页面的 new 功能,那么您应该创建一个新操作和一个新视图。
如果主页上的属于,则将其置于相同的index
方法中。
请注意,在grails中,您只需将值传递到.gsp
页面,.gsp
页面就可以处理数据的格式。您的action
应该完全了解视图的结构。这是MVC的核心概念。
在这种情况下,您可以按the docs重定向到控制器。你最感兴趣的是:
redirect(controller: "yourController", action:"index", params=[filteredList: filteredList]);
这将重定向到UserOrderController中的现有索引操作,并传入已过滤的列表。从那里,你可以有类似的东西..
if(params.filteredList) {
// You know this came from the filtered controller, so display this and don't
// make a DB call.
}
指出要点
修改强>
采用createLink
方法可以稍微改进一下。而不是..
<a href='${createLink(controller:'UserOrder', action:'index')}'>%s</a>
您可以使用g:link
功能:
<g:link controller="UserOrder" action="index" params=['filteredList':filteredList]>%s</g:link>
答案 1 :(得分:1)
如果您尝试为过滤器UserOrderFilterController
创建新控制器,则可以执行
class UserOrderFilterController {
def getUOBasedOnID () {
//get filtered list
respond filteredList, [view:'userOrder/index',model:[userOrderInstanceCount: filteredListCount]]
}
}
您可以详细了解回复here。