2014-09-03 85 views
0

我的Grails項目我有一個複選框。我想打電話給一個remoteFunctiononCheck()複選框的方法,如下所示:從控制器獲取複選框狀態

if(checkbox.isChecked) 
{ 
    //do something 
} 
else 
{ 
    //do some other thing 
} 

事實是,我不知道怎麼弄的複選框的狀態控制器,其選中/清除後。是否需要使用一些JavaScript代碼? 有什麼建議嗎?

編輯: 這是複選框

<g:checkBox name="hasStampDuty" value="${receiptInstance?.hasStampDuty}" 
      onclick="${remoteFunction(
        controller: 'Receipt', 
        action: 'addStampDuty', 
        params: '\'id=\' + this.id+\'ischecked=\'+this.checked', 
        onSuccess: 'updateTotalAmount(\'totalAmount\', data, \'00000\')')}" 
/> 

其中addStampDuty如下:

def addStampDuty(Long id, boolean ischecked) 
{ 
    //add stamp duty value 
    def receiptInstance = Receipt.get(id) 
    if(ischecked != null) 
    { 
     if(ischecked) { 
        //do something 
     } 
     else { 
       //do some other 
     } 

    } 

} 

但是id總是空...

+0

控制器中複選框的狀態是,如果元素在params中以某個值退出或不退出。例如,如果您有一個名爲「something」的元素,並且在表單被髮送到您的控制器params.s時檢查它。有些東西會有值。如果它沒有被檢查,那麼params.something就沒有價值。 – 2014-09-03 13:19:17

+0

事實是,我需要檢查sumbit之前的複選框,所以params沒有params.something – FrancescoDS 2014-09-03 13:20:46

+1

然後,您可能想要更改您的問題,因爲你說「獲取控制器中的複選框的當前狀態」。 – 2014-09-03 13:48:41

回答

0

在正常情況下,狀態該複選框被傳遞給參數中的動作。如上述註釋中所述,是否存在形式爲「$ {fieldName} .selected」的參數指示覆選框是否被選中(選中)。我同意這有點尷尬。但是,如果你直接使用這些參數,那麼你可能弄糟了那份合同。

你可以把下面的代碼在你的動作,看看它到底是什麼傳遞則params的開始:

log.info("Executing \"blah\" action.") 
    params.each { log.info("Param ${it.key} = {$it.value}") } 

作爲一個側面說明,如果你想這樣做的所有操作,然後創建一個過濾器(請參閱Grails過濾器)以及您認爲合適的橫切。

最後,我相信Grails AJAX包裝標籤已被棄用,您應該避免使用它們。只需使用jQuery(或任何您喜歡的)AJAX客戶端支持發佈表單,並讓表單字段在正常的Grails約定中填充參數。您應該閱讀

相關問題