从视图发送的HashMap是控制器中的String对象

时间:2013-02-06 09:25:56

标签: grails

  1. 我从控制器发送HashMap到视图:

    def list2 =  [id:params?.id, title:params?.title, domain:params?.domain, orderOfSubpage:params?.orderOfSubpage]
    render(view: "list", model: [subpageInstanceList: list, subpageInstanceTotal:  list.getTotalCount(), searchParams:list2])
    
  2. 当用户点击表格标题时,我将这个HashMap发送回控制器:

    <g:sortableColumn property="id" title="Id" class="td-id-class subpage-td" params="['searchParams':searchParams]"/>
    
  3. 我在调试器中检查值,其中设置了标志:

    def map = params
    

    值为:

    searchParams={id=, title=, domain=, orderOfSubpage=}
    
  4. 我正在尝试从此'map'获取值,该值已经是String:

    def map2 = params?.searchParams
    def id = map2?.id //here is an Exception (checked in debugger)
    
  5. 异常我回来了:

    Class groovy.lang.MissingPropertyException
    Message No such property: id for class: java.lang.String
    
  6. 当我用ArrayList做同样的事情时没有问题,一切正常,List总是List。为什么Map将变换/强制转换为String?
    问题:为什么发送回控制器的对象是字符串,或者至少像字符串一样?

1 个答案:

答案 0 :(得分:2)

来自http://grails.org/doc/latest/ref/Tags/sortableColumn.html

  

params(可选) - 包含请求参数的地图

你有:<g:sortableColumn ... params="['searchParams':searchParams]"/>。但是searchParams不是一个合适的请求参数,因为它本身就是一个地图。

明确添加所有值,例如id,title,domain和orderOfSubpage,如:

params="[id:searchParams.id, domain:searchParams.domain, ...]"

甚至:

params="${searchParams}"