Grails:从另一个控制器更新Index.gsp

时间:2015-03-10 17:50:49

标签: grails groovy

我的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 。这可能吗?

2 个答案:

答案 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.
}

指出要点

  • 你的grails应用程序的结构让我担心。为什么你有一个完全独立的控制器来简单地过滤数据?

修改

采用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