我从控制器发送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])
当用户点击表格标题时,我将这个HashMap发送回控制器:
<g:sortableColumn property="id" title="Id" class="td-id-class subpage-td" params="['searchParams':searchParams]"/>
我在调试器中检查值,其中设置了标志:
def map = params
值为:
searchParams={id=, title=, domain=, orderOfSubpage=}
我正在尝试从此'map'获取值,该值已经是String:
def map2 = params?.searchParams
def id = map2?.id //here is an Exception (checked in debugger)
异常我回来了:
Class groovy.lang.MissingPropertyException
Message No such property: id for class: java.lang.String
当我用ArrayList做同样的事情时没有问题,一切正常,List总是List。为什么Map将变换/强制转换为String?
问题:为什么发送回控制器的对象是字符串,或者至少像字符串一样?
答案 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}"