2010-05-07 50 views
2

是否有任何推薦的方法來限制在grails中域的可見性?如何限制grails中域屬性的可見性?

通常你,你做這樣的事情得到一些接口外用藥:

def productList = Product.list() 
withFormat { 
    html {[productList:productList]} 
    json { render productList as JSON } 
    xml { render productList as XML } 
    rss { render(feedType:"rss", productList)} 
} 

等於

SELECT * FROM product 

但默認情況下有proerties中不應該被填充的一個域。所以我需要說些什麼

SELECT id, name, foo1, foo2 FROM product 

所以只有屬性列表包含在答案中。

回答

2

您可以使用第二個域類類似於視圖。關鍵是要配置映射,它具有相同的表作爲產品類:

class ProductView { 

    String name 
    Foo foo1 
    Foo foo2 

    static mapping = { 
     table 'product' 
    } 
} 

然後用在你的UI:

def productList = ProductView.list() 
withFormat { 
    html {[productList:productList]} 
    json { render productList as JSON } 
    xml { render productList as XML } 
    rss { render(feedType:"rss", productList)} 
} 
+0

有沒有像使用AOP任何其他方式?或者一個允許的插件? – fabien7474 2010-05-07 15:27:29

+0

好主意,但有點破解,因爲這不是很靈活。它的性能呢,hibernate是否支持創建視圖? – skurt 2010-05-07 15:36:13

+0

性能與任何領域類相同 - Hibernate只使用定義的字段進行選擇。你可以映射一個視圖,但這很棘手,因爲它會在使用update或create-drop時嘗試創建「表」。 – 2010-05-08 08:12:50