【问题标题】:can't Access hidden field or params in controller无法访问控制器中的隐藏字段或参数
【发布时间】:2012-10-24 20:19:40
【问题描述】:

我正在将参数和客户 obj 从控制器传递到 gsp 页面。例如

render(view:"finish", params: params, model:[customer: customer])

finish.gsp 使用传递的参数和客户对象打印表单字段。例如${params.name}${customer.name}。在选择完成按钮后的完成页面上,我想传递参数或客户对象值以保存客户对象。所以我在finish.gsp上设置隐藏字段。

  <g:actionSubmit action="save" value="Done" class="button1" params ="${customer}"/>
  <g:hiddenField name="kbc" value="${params}" />
</g:form>`

我可以看到 println params.kbc 的保存操作方法的值

[contactBy:email, appointmentDate:Wed Oct 24 14:54:00 CDT 2012, appointmentDate_day:24, appointmentDate_hour:14, sentReminder:on, appointmentDate_month:10, emailAddress:jaimataji@jaimataji.com, lookingFor:0, appointmentDate_year:2012, appointmentDate_minute:54, _action_finish:Next, myGroup:0, _sentReminder:, description:test, name:abc, contactNo:7777777777, action:index, controller:customer]`</b>

但是当我尝试访问params.kbc.name 时,它会抛出错误提示

No such property: name for class: java.lang.String

我不知道我哪里出错了。如果我错了,请纠正我。

【问题讨论】:

    标签: grails gsp


    【解决方案1】:

    我相信params 对象不会尝试解析/转换传递数据的内部结构。它只是一个http请求参数。所以,你只能有一个String

    如果您需要将String 转换为Map,您应该编写自己的转换器。好像不是你想要的。

    或者,如果您需要params.kbc.name,您可以将其作为&lt;g:hiddenField name="kbc.name" value="${params.name}" /&gt; 传递给其他字段。

    【讨论】:

    • 好的,这是一种方法,但是如果有更多的表单字段,它最终会有很多隐藏字段。有没有办法可以传递模型客户对象?我将它作为隐藏字段传递,但我在 params obj 中看不到它?
    • 您真的需要所有字段吗?你也可以只传递id 字段,然后从数据库中加载对象
    • 是的,我需要所有字段,因为从表单收集的值在保存之前显示在下一页。如果保存了 obj,那么仅 id 就足以加载它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 2013-10-03
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多