2011-05-16 57 views
1

是否有人寫過遍歷所有params值並在對象上設置這些值的通用操作?grails如何迭代params並設置值

我想寫的東西是這樣的:

def updateSomeObject = {obj-> 
    for (def key : params.keySet()) { 
     if (obj.hasProperty(key) != null) { 
      def strValue = params[key] 
      obj[key] = strValue 
    } 
} 

,但這僅適用於字符串值。在我的情況下,有一對一的關聯,所以它也必須處理對象。

我不想將屬性(它們的名字)設置爲對象,其值爲null。

+0

你嘗試使用..metaclass.hasProperty()? obj。「$ key」= val? – netbrain 2011-05-16 10:47:28

+0

我試過後,你的帖子,但它給了strVal相同的結果..問題,在一種情況下,它必須是int,爲另一個屬性字符串或對象..等等。現在它只適用於String類型。 – Bella 2011-05-16 12:19:25

回答

2

它看起來像你試圖綁定請求參數到一個對象。您確實不需要編寫自己的代碼來執行此操作,因爲Grails控制器已提供bindData方法。

+0

不要請看我的一個問題(標題:更新單向一對一問題)。 bindData不起作用,我必須嘗試像這樣的例子...我問這個問題,因爲我沒有找到我以前的問題的答案。 – Bella 2011-05-16 10:32:35

+0

貝拉,你可以在這裏重新提出你以前的問題的相關部分。否則,將很難幫助您找到答案。 – Ruben 2011-05-16 11:08:38

+0

Ruben ok。在我之前的問題中,我寫道,我有2個具有單向一對一關聯的域類。 class Domain1 {String val11 Domain2 domain2} class Domain2 {String val21}我可以成功創建對象,但在關聯之後,我無法更新domain1對象。我已經使用obj.properties = params。更新後,當我想保存domain1時,出現異常:NullPointerException異常:ERROR gorm.SavePersistentMethod - 無法獲得null對象上的屬性'class'java.lang.NullPointerException:無法在null對象上獲取屬性'class' – Bella 2011-05-16 11:32:38

0

這是你想要做的嗎?

obj.properties = params 

希望幫助

3

我用這個循環的Grails PARAMS:

Collection<?> keys = params.keySet() 
    for (Object key : keys) { 
     //check if key=action and key=controller which is grails default params 
     if (!key.equals("action") && !key.equals("controller")) { 
      println key //print out params-name 
      println params.get(key) //print out params-value 
     } 
    } 

希望可以幫助...

+0

很好,謝謝 – Guus 2014-04-18 17:48:19