1
  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. すでに文字列であるこの「マップ」から値を取得しようとしています:

    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
    

ArrayList で同じことを行っている場合、問題はありません。すべて正常に動作し、List は常に List です。Map が String に変換/キャストされるのはなぜですか?
質問:コントローラーに送り返されるオブジェクトが文字列である、または少なくとも文字列のように動作するのはなぜですか?

4

1 に答える 1

2

http://grails.org/doc/latest/ref/Tags/sortableColumn.htmlから:

params (オプション) - リクエスト パラメータを含む Map

あなたが持っている: <g:sortableColumn ... params="['searchParams':searchParams]"/>. ただし、searchParams はそれ自体がマップであるため、適切な要求パラメーターではありません。

次のように、id、title、domain、および orderOfSubpage などのすべての値を明示的に追加します。

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

あるいは:

params="${searchParams}"
于 2013-02-06T14:25:48.260 に答える