Как установить значение одного поля в качестве параметра при использовании удаленной ссылки gsp - PullRequest
0 голосов
/ 17 января 2019

Я впервые использую gsp, и у меня есть требование обновить значение при нажатии кнопки. Для этого я использую удаленную ссылку.

У меня есть текстовое поле ниже с идентификатором update_${test.id}

<g:textArea name="test" id="update_${test.id}" value="${test?.number}" disabled="${readonly ? true : false}" />

Мне нужно иметь возможность установить значение параметра required равным значению внутри textArea.

<g:remoteLink action="updateTest" params="{required:\$('#update_${test.id}').val()}" update="updateOnClick" class="btn btn-default"><span class="icon-save"></span></g:remoteLink>

Это явно неправильный подход. Может ли кто-нибудь помочь мне с этим.

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Вот пример g: link, передающий одну пару имя-значение. Чтобы добавить несколько, просто добавьте запятую и вторую пару значений имени в квадратных скобках.

<g:link role="button" class="btn btn-success" action="details" params="${['folderNumber' : instance.fileFolderNumber]}" title="Details">Details</g:link>

Обратите внимание, что g: remoteLink устарела. Я перешел на использование JQuery для выполнения вызовов Ajax.

0 голосов
/ 18 января 2019

Спасибо за все предложения. Это то, что требовалось. Я мог бы найти свое решение на основе вашего предложения.

    <g:javascript>
        function updateMethod(testId) {
            $.ajax({url: "${g.createLink( controller: 'testHandler', 
               action: 'testOnChange')}", 
               type: "POST",
               data: {'id': testId},
               success: function ( data ) {
                 $("#rowUpdated").show().delay(2500).fadeOut();
                 $("#updateFailed").hide();
              },
              error: function( j, status, eThrown ) {
                 $("#updateFailed").show().delay(2500).fadeOut();
                 $("#rowUpdated").hide();
                 console.log( 'Error ' + eThrown )
              }
           });
       }
    </g:javascript>
    <a href="javascript:void(0)" onclick="updateMethod('${test.id}');return false;" class="btn btn-default"><span class="icon-save"></span></a>
0 голосов
/ 17 января 2019

В следующем примере используется ajax для передачи всех полей формы в контроллер с помощью serialize, вы можете выбрать, какие из них вы хотите использовать в своем действии, как мы сделали ниже, распечатав значение текстовой области.

Затем мы отображаем текст, который обновляет div на экране.

Контроллер

class TestStuffController {

    def index(){}

    def myAction() {
        println params.myTextArea
        render 'Updated'
    }
}

index.gsp

<!DOCTYPE html>
<html>
<head>
    <meta name="layout" content="main">
    <script type="text/javascript">
        $( document ).ready( function() {
            $( '#myButton' ).on( 'click' , function (event) {
                $.ajax({
                    url: "${g.createLink( controller: 'testStuff', action: 'myAction')}",
                    type: "POST",
                    data: $( "form" ).serialize(),
                    success: function ( data ) {
                        $( '#myDiv' ).html( data );
                    },
                    error: function( j, status, eThrown ) { console.log( 'Error ' + eThrown ) }
                });
            });
        });
    </script>
</head>
    <body>
        <div>
            <div id="myDiv"></div>

            <g:form id="myForm">
                <g:textArea name="myTextArea" id="myTextArea" />
                <button type="button" name="myButton" id="myButton">Update</button>
            </g:form>
        </div>
    </body>
</html>
...