2012-04-15 9 views
1

私は、ビューlist.gspはこのような何かに見える2つのドメインオブジェクト、ドキュメントや著者GrailsのsortableColumn

Class Document { 
    Author author 
    String title 
} 

Class Author { 

    String lastName 
    String firstName 

    String toString() { 

     return lastName + ", " + firstName 
    } 
} 

があるとしますと

<g:sortableColumn property="title" title=... /> 
<g:sortableCOlumn property="author" title=... /> 

.... 

<td>${fieldValue(bean: documentInstance, field: "author"}></td> 
<td>${fieldValue(bean: documentInstance, field: "title"}></td> 

テーブル作業中に表示される値をつまり、テーブルの行は、authorを(lastName、firstName)としてdocumentInstance.titleの横に表示します。

ただし、ソートするAuthor列ヘッダーをクリックすると、 "documents"がauthor.idでソートされます。

author.idでソートするのではなく、author.toString()または "author.lastName、author.firstName"でソートするのが最も便利です。

可能であれば、.withCriteria {}に落ちないようにしたいと思います。私はこの機能が必要な4つの異なる列を持っていて、それは乱雑になるようです。

答えて

2

私はGrailsの初心者ですから、私の答えは最適ではないかもしれませんが、これは私のための最も簡単な方法でした:

Document.list(params)の代わりにDocument.findAll()を使用しました。私のアプリケーションではリストに何らかのフィルタが必要であることに言及する価値があるので、findAll()が最善のアプローチでした。とにかく、ここで私はそれを行うだろうかです:

Document.findAll("from Document as d order by d." + params.sort + ' ' + params.order, params) //supports pagination 

とビューで:

<g:sortableCOlumn property="author.lastName" title=... /> 
それが動作するはずのように聞こえる
+1

私はwithCriteriaを使用して終了しました...私は答えとしてこれをマークするつもりです。ありがとう! – MT1

3

あなたは上ソートする仮想列を作成するためにderived propertyを使用することができます。そして、sortingNameにあなたのコラムを設定

Class Author { 

    String lastName 
    String firstName 
    String sortingName 

    static mapping { 
     // modify the SQL formula to use your DB's concatenation operator 
     sortingName formula: "`LAST_NAME` || ',' || `FIRST_NAME`)" // Standard SQL 
    } 

    String toString() { sortingName } 
} 

<g:sortableColumn property="author.sortingName" title=... /> 

(私は一種のここに推測しているが、私

+0

が、私は避けることができれば、私はSQLの直接使用を伴うというではないと思いますそれ。アイデアをありがとう。 – MT1

+0

http://grails.org/doc/latest/guide/GORM.html#derivedPropertiesポイント7.5.2.11を前提とすると、sortingNameの後にはコロンを使用しないでください。 – MNie

+0

@タデク良いキャッチ、それはあなたが正しいと思われる。これはDSLのような問題ですが、何がプロパティで、何が関数呼び出しであるのかを判断するのは難しい場合もあります。 :-) – OverZealous