Как показать рассчитанные поля на show.gsp?

У меня возникли трудности с вычислением несохраненных полей. Я хотел бы показать свои реальные доменные классы, но у них есть много полей. Итак, давайте рассмотрим следующий класс домена:

class ImportantCalculation {
 BigDecimal parameter1
 BigDecimal parameter2
 BigDecimal parameter3
 BigDecimal result1
 BigDecimal result2
 ...
}

Результат1 и результат2 являются вычисляемыми полями, которые зависят от промежуточных результатов вычислений с использованием параметра 1, параметра 2 и параметра 3. Использование вида математической записи (в реальных вычислениях используется много классов и запросов к базе данных):

subresult1=function(parameter1)
subresult2=function(parameter2,parameter3)
result1=function(subresult1,subresult2)
result2=function(parameter1,subresult2)

В create.gsp эти вычисления выполняются в классе Java, который вызывается службой. Эта услуга используется контроллером. И этот контроллер вызывается элементом автозаполнения jQuery внутри файла JavaScript, затем отображается в соответствующих полях:

Calculations.java -> CalculationsService.groovy -> CalculationsController -> calculations.js -> GSP view.

Представление GSP содержит поля для отображения промежуточных результатов.

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

Итак, мне нужно, чтобы эти промежуточные результаты были показаны в представлении show.gsp, а также в представлении edit.gsp. Но я не знаю, как это сделать. Я пытался использовать Ajax и jQuery, но я новичок в этих инструментах.

Пожалуйста, помогите мне.

Заранее спасибо.

1 ответ

В вашем gsp вы можете использовать вызовы ajax к контроллеру, который вычисляет результаты для вас и возвращает как JSON. В вашем gsp у вас будет такой код JavaScript:

 $.ajax({
        var value = "any value to be passed as param";
        url: "${createLink(controller: 'calculations', action: 'calculate')}",
        data: {key:value}, //in your controller, look for the parameter "key" in params map
        dataType: 'json',
        success: function(data) {
            if (data) {
             //do something with data (the json object rendered by the action 'calculate')   
            }
        }

    });

И в вашем контроллере у вас будет действие, вычисляющее результат или получающее результат, уже сохраненный где-то, например:

def calculate() {
    def result = calculatorService.doSomething()
    render result as JSON
}

Строка с командой "render" - это та, которая отправляет результат обратно вызывающей стороне (функция javascript 'success').

Вы можете увидеть примеры одного и того же здесь и здесь.

Другие вопросы по тегам