【问题标题】:Grails: Unable to get model data from controller to viewGrails:无法从控制器获取模型数据以查看
【发布时间】:2010-09-01 03:55:58
【问题描述】:

过去 3 周我一直在使用 Grails(学习和工作)。我一直致力于将 JSP/Servlet 应用程序移植到 Grails,并且移植应用程序绝对“有趣”。

我遇到了一个问题,一直在搜索、阅读但还没有解决。

在 GSP 页面中,我有一个文本字段和搜索按钮,用户可以在其中输入 ProductID。我有一个控制器,当单击搜索按钮时,它会从 jQuery Ajax 方法调用。

 // ----- jQuery Ajax 调用的一部分 ---
$.ajax({
        类型:“帖子”,
        url : '/${grailsApplication.metadata['app.name']}/product/checkProductAjax',
        数据:“pid="+proID,

// ----- 控制器代码-----
类产品控制器 {
      def 脚手架 = 真
          def checkProductAjax = {
                 def product= Product.findByProductId(params.pid)
                如果(产品){
                     [product: product] // 获取 GSP 页面数据的模型。
                      渲染(product.toString() + ":" + product.id)
                } 别的 {
                    渲染(“无”)
                }
          }
}

Ajax 调用,一切正常。我面临的问题是如何获取模型(即产品数据返回 GSP 页面,即 [product: product] 并在 GSP 中显示,例如 Product Name: ${product}

我怎样才能让它工作?我已阅读示例,其中提到仅设置模型 [产品:产品] 将有助于获取 GSP 中的数据。

产品名称:${product} 在 GSP 页面中始终显示空白产品名称:

请告诉我我做错了什么。

干杯! 杰伊·钱德兰

【问题讨论】:

    标签: grails grails-controller


    【解决方案1】:

    [product: product]render(product.toString() + ":" + product.id) 不兼容。当你看到一个控制器动作的最后一行是像[product: product] 这样的映射时,这是隐式返回值,因为它是动作闭包的最后一条语句——它相当于return [product: product]。但是,如果您在方法中间有一个映射,它只是被创建和丢弃。它几乎等同于

    def ignoreThisMap = [product: product]
    // other code
    

    由于您正在进行 Ajax 调用,因此将产品放入模型中没有意义,因为您不会重新渲染 GSP。您将呈现文本、JSON、XML 或客户端 JavaScript 将用于更新某些 html 子集的其他内容。所以你可能想要更接近的东西

    if (product) {
       render product as JSON
    }
    else {
       render "none"
    }
    

    然后您可以使用 jQuery 或 Prototype 来评估 JSON 并在您的 JavaScript 中提取数据。

    【讨论】:

    • 您好,感谢您的提示。我应该对此有所了解。 :) 我现在将产品呈现为 JSON 并使用 jQuery 在页面中获取所需的值!非常感谢... :)
    【解决方案2】:

    您可能希望使用为此类工作创建的 grails 标签;它为你包装了所有的 AJAX 代码

    http://www.grails.org/Ajax

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多