2013-02-02 88 views
2

我創建了一個taglib來縮短輸入字段代碼。它預設'名稱','價值'等。現在我需要獲取一個bean值,但保存該值的字段是動態的。
看到一些代碼(簡稱爲更好地鍛鍊我的問題):在grails中獲取動態bean字段

GSP:

<g:validatedInputField bean="${command}" field="surname" /> 
<g:validatedInputField bean="${command}" field="name" /> 

的taglib

def validatedInputField = { attrs, body -> 

    def field = attrs.field 
    def bean = attrs.bean 

    if (field && bean) { 

     def val = bean.field 
     out << "<input type=\"text\" name=\"$field\" bean=\"$bean\" value=\"$val\">" 
    } 
} 

所以問題是以下行。它顯然不起作用,因爲bean中沒有字段「字段」。我希望它被'name'或'surname'動態替換,或者param'field'的任何值。

def val = bean.field 

我試着用各種GString /插值變化實現,但沒有任何工作。
當然我可以只添加一個參數去傳遞價值,但我覺得,因爲我已經擁有了一切,我需要得到它的taglib它不應該被要求...

能否請您給我一些方向?
感謝

回答

1

在Groovy中,你可以參考的一員通過使用GStrings動態地對象。例如:

def val = bean."${field}" 

你甚至可以在GString中執行一些邏輯。比方說,你有一個默認的領域,你想使用的名稱「字段」變量中,只有當它不爲空:

def val = bean."${field ? field : "default"} 
+1

一定是昨天晚些時候,這是不是太硬;-) – moeTi

1

如果bean是一個對象實例,field是代表該對象的成員的字符串,你可以嘗試這樣的:

def val = bean."$field"