如何在控制器中显示消息框?

时间:2011-09-07 01:25:54

标签: javascript jquery grails groovy gorm

用户在表单上输入一些数字和其他数据后,计算总计。用户还可以选择输入折扣金额。我使用jQuery AJAX方法将所有数据发送到getTotal控制器中的Load方法。如果用户输入的折扣金额大于计算的总金额,我希望弹出一个消息框(类似于JavaScript alert框),说明折扣必须小于总金额。从控制器那里有没有干净的方法呢?

3 个答案:

答案 0 :(得分:1)

没有。您希望在ajax响应中发回结果,告知客户端显示您的消息框。然后你可能会用JavaScript来展示它。有很多用于显示消息框的jQuery插件。例如:jQueryUI's Dialog

答案 1 :(得分:1)

这就是我所做的。在我看来,我在我的一个JavaScript方法中有以下代码。我使用jQuery的getJSON而不是ajax,因为它看起来更合适(更干净)。

$.getJSON(
  "/truckingmanagement/load/getTotal",
  {cargoSource:cargoSource, cargo:cargo, haulRate:haulRate, tonnage:tonnage, mileage:mileage, discount:discount, taxExempt:taxExempt},
  function(result) {
    if(result.message != null){
      alert(result.message);
      $("#discount").val("");
      $("#totalCell").html(result.total);
    }
    else{
      $("#totalCell").html(result.total);
    }
  });

我的控制器我仍然在我的闭包中使用了render方法,但是为JSON修改了它,确保import grails.converters.*

render(contentType:"text/json") {
    total = g.textField(name: 'total', value: totalBill, readonly: 'readonly')
    message = errorMessage
}

在调用totalBill之前计算了render值,而errorMessage只是一个字符串,其中包含基于错误内容的消息(负折扣值或折扣值更大)总数)或根本没有消息。因此,如果消息为null,则不会显示任何消息。

答案 2 :(得分:0)

我认为技术上可以让你的控制器生成javasacript作为对ajax调用的响应,但这是一种非常难看的方式。

更好的是发送JSON。类似的东西:

result = []
result.success = total >= discount
result.total = total
render result as JSON

在Ajax调用中,检查是否成功,如果成功则显示总数,如果没有则显示消息。