【问题标题】:Grails : Updating Index.gsp from another controllerGrails:从另一个控制器更新 Index.gsp
【发布时间】:2015-05-12 07:14:31
【问题描述】:

我的 Grails 应用使用的是 2.3.6 版

在这个应用程序中有一个控制器类:

class UserOrderController {

def index(Integer max) {
        params.max = Math.min(max ?: 20, 100)       
        respond UserOrder.list(params), model:[userOrderInstanceCount: WorkOrder.count()]
    }
}

现在在另一个控制器中,我正在访问 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 与超链接一起显示,当用户点击它时,它将转到 UserOrderControllerindex.gsp 页面仅显示过滤后的 UserOder

所以我期待的是:

<a href='${createLink(controller:'UserOrder', action:'index')}'>%s</a>

如上所示的 href 带有一个 params 字段,该字段将包含 UserOrder 的过滤列表。

我不知道如何将参数/列表添加到 href。这可能吗?

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

    Grails 中的每个action 都有一个匹配的view。重复动作是自找麻烦。如果您有一些值得拥有自己的页面的功能,那么您应该创建一个新操作和一个新视图。

    如果它属于主页,则通过相同的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>
    

    【讨论】:

    • 请查看我原来问题中的更新内容。
    • 在 UserOrderController 的 index.gsp 文件中,它使用 EasyGrid 表来显示数据。在 UserOrderFilterController 类的 getUOBasedOnID 函数中,我有一个 UserOrder's 的本地列表,我如何确保该列表本身填充在索引中.gsp 在 UserOrderController ???
    • 您为示例添加了越来越多的复杂性。您能否为您的代码创建一个完整的解释?
    【解决方案2】:

    如果您尝试为过滤器UserOrderFilterController 创建新控制器,您可以这样做

    class UserOrderFilterController {
    
    def getUOBasedOnID () {
    
      //get filtered list
        respond filteredList, [view:'userOrder/index',model:[userOrderInstanceCount: filteredListCount]]
      }
    }
    

    你可以看到更多关于回复here

    【讨论】:

    • 请查看我原来问题中的更新内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多