2012-07-20 79 views
6

與具有動作的按鈕有關。我有幾個btns,我想知道它的參數。 Grails的教程它說,它應該是這樣的:如何在grails中使用動作按鈕傳遞參數

<g:actionSubmit action="action" value="${message(code: 'default.button.edit.label', default: 'Edit')}" params="['actionTaken':editPhone]"/> 

我試着用remotelink,提交按鈕,submitToRemote標籤,但沒有工作。當我嘗試在我的控制器中解析時,我總是得到空白:

def action= 
    { 
     def actionTaken = params.actionTaken 
     def employeeId= params.employeeId 

     MySession session = MySession.getMySession(request, params.employeeId) 
     profileInstance = session.profileInstance 

     switch(actionTaken) 
     { 
      case "editPhone" : 
       isEditPhone=true 
       break 

      case "editEmail" : 
       isEditEmail=true 
       break 
     } 
     render(view:"profile", model:[profileInstance:session.profileInstance, isEditPhone:isEditPhone, isEditEmail:isEditEmail]) 
    } 

我在想什麼?是我的params代碼錯誤?我的代碼解析params是錯誤的嗎?這只是讓我在沒有進步的圈子裏。幫幫我。謝謝。

+0

您是否嘗試過** **。也許我忘了{}關於params屬性,如果它不起作用,請嘗試將它們放入** [{}] **或** {[]} **我現在不再修改它。 Sry – axierjhtjz 2012-07-20 10:36:04

回答

7

Grails documentation未列出params作爲actionSubmit接受的屬性之一。

可能通過利用什麼標籤實際上確實注入在控制器的PARAMS列表中選擇所需的值:

def editPhone = { forward(action:'action', params:[actionTaken: 'editPhone'])} 
def editEmail = { forward(action:'action', params:[actionTaken: 'editEmail'])} 

你也可能只是想剛纔的代碼完全獨立的邏輯進入editPhoneeditEmail行動,如果這使您的代碼更清潔。

更新查看代碼:

<g:actionSubmit action="editPhone" value="${message(code: 'default.button.edit.label', default: 'Edit')}" /> 
4

params屬性被解析爲一個圖,其中被處理的字符串鍵但被視爲表達式。因此

params="['actionTaken':editPhone]" 

試圖定義一個名爲actionTaken有從GSP型號命名editPhone變量中的值的關鍵。由於沒有這樣的變量,你會得到空值。所以修復是移動報價:

params="[actionTaken:'editPhone']" 

它將值設置爲字符串「編輯電話」。

+2

其實,我在這裏發佈之前就已經這樣做了,而且還是空的。 :( – user742102 2012-07-20 14:52:49

+0

這不適用於Grails 2.0 – 2016-04-04 07:31:49

0

我只是有一個類似的問題(我需要提交與ID一起刪除),並使用HTML5的「formaction」屬性提交,輸入找到了解決辦法。 他們可以被賦予一個值,其中可以包含控制器,動作,附加參數等。

通常,要向提交按鈕添加參數,例如編輯表單上的特定子對象,像這樣:

<input type="submit" formaction="/<controller>/<action>/<id>?additionalParam1=...&additionalParam2=..." value="Action" > 

,並在你的榜樣:

<input type="submit" formaction="action?actionTaken=editPhone" value="${message(code: 'default.button.edit.label', default: 'Edit')}" > 
2

您還可以通過使用

的POST數據裏面的參數

裏面的表格。然後它也可以通過params變量訪問。 它適合我。

+0

這是正確的答案imho。您必須記住的上下文位於表單內,並且表單將被提交給列出的操作標籤。 – nby 2015-10-06 22:57:07

0

在我的情況下,我在表格的每一行(即數據表編輯按鈕)上都有一個單一的表單元素。發送整個表單數據非常重要,所以我不能只使用鏈接。我發現注入參數的最快捷方式是使用javascript。不理想,但它的工作原理:

function injectHiddenField(name, value) { 
    var control = $("input[type=hidden][name='" + name + "']"); 
    if (control.size() == 0) { 
     console.log(name + " not found; adding..."); 
     control = $("<input type=\"hidden\" id=\"" + name + "\" name=\"" + name + "\">"); 
     $("form").append(control); 
    } 
    control.val(value); 
} 

你的按鈕就可以是這樣的:

<g:each in="${objects}" var="object"> 
    ... 
    <g:actionSubmit value="edit" action="anotherAction" 
        onclick="injectHiddenField('myfield', ${object.id})"/> 
</g:each>