6

アクションのあるボタンで苦労している。私はそのパラメータを知りたいいくつかのbtnsを持っています。grailsチュートリアルでは、次のようになります。

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

remotelink、submitButton、submitToRemoteタグを使用してみましたが、どれも機能しません。コントローラで解析しようとすると、常にnullになります。

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])
    }

私は何が欠けていますか?私のパラメータコードは間違っていますか?パラメータを解析する私のコードは間違っていますか?これは私を進歩せずに輪になってしまうだけです。ヘルプ。ありがとう。

4

5 に答える 5

7

Grailsのドキュメントはparams、によって受け入れられる属性の1つとしてリストされていませんactionSubmit

そのタグが実際に行うことを利用することにより、コントローラーのパラメーターリストに必要な値を挿入することができます。

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

コードをよりクリーンにする場合は、ロジックをアクションに完全に分離してコーディングすることもeditPhoneできます。editEmail

更新されたビューコード:

<g:actionSubmit action="editPhone" value="${message(code: 'default.button.edit.label', default: 'Edit')}" />
于 2012-07-21T06:05:52.490 に答える
4

params属性はマップとして解析され、キー文字列として扱われますが、は式として扱われます。したがって

params="['actionTaken':editPhone]"

GSPモデルでactionTaken指定された変数からの値を持つように指定されたキーを定義しようとしています。editPhoneそのような変数がないので、nullになります。したがって、修正は引用符を移動することです。

params="[actionTaken:'editPhone']"

これにより、値が文字列「editPhone」に設定されます。

于 2012-07-20T12:33:57.687 に答える
3

を使用してPOSTデータ内にパラメータを渡すこともできます

<input type="hidden" name="actionTaken" value="editPhone" />

フォーム内。次に、params変数からもアクセスできます。わたしにはできる。

于 2013-10-03T12:13:42.590 に答える
0

同様の問題が発生し(IDと一緒に削除を送信する必要がありました)、submit-inputsに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')}" >
于 2013-08-14T17:04:32.990 に答える
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> 
于 2015-10-20T19:24:06.903 に答える