从Grails </g:set>的下拉列表中使用<g:set>设置变量

时间:2014-01-13 09:00:41

标签: grails

在Grails gsp中, 当用户从下拉列表中做出选择时,如果用户从以下位置选择值,则以另一种方式分配变量:

<g:select name="patient.id" from="${patients}" optionKey="id" > 

我想在下面将患者的id设置为“pid”变量:

<g:set var="pid" scope="request">

与我成功的唯一方法是:

<g:set var="pid" value="${2}" scope="request">

但这不是动态的方式。

我怎样才能实现这一目标?

感谢 警长

2 个答案:

答案 0 :(得分:0)

g:set实际上不是一个html字段,你试图从html / js代码中分配一个java对象。

您无法从客户端脚本中为任何Java对象分配js变量。如果您需要一种解决方法来实现此目的,那么您可以做的最大值是:

$('#your_select').on('change',function(){
if($('this').val()=="bingo"){
var X="${pid="bingo"}" //if will assign pid a string "bingo" and X(a js var) value "bingo"
}
}

请参阅${}之间的代码是服务器端代码,并且您无法在其中编写任何客户端代码,因此基本上您不能只执行"${pid=$(this).val()}"之类的操作。

如果你想知道为什么我们不能这样做是因为没有必要这样做,并且它也没有意义,如 Igor Artamonov 的评论中所述。

答案 1 :(得分:0)

在你不需要一些解决方法,正如我在另一个答案中所描述的那样,对于各种要求的最佳解决方案是:

  1. 在某些js变量中获取select的值。
  2. 对服务器操作进行AJAX调用,该操作将根据请求参数发送数据,因此在这种情况下,一个参数将是您选择的值。
  3. 接收AJAX响应并根据响应设置html元素。
  4. 所以例子是:

    var selected = $('#your_select_id).val();
    jQuery.ajax({
                        type: 'POST',
                        url: 'your action url that will render response',
                        data: "selected="+selected,
                        async: false,
                        success: function(response,textStatus){
                            json= JSON.parse(response);
                            $('#some_textBox).val(json.somevalue);
                         },
                        error:function(XMLHttpRequest,textStatus,errorThrown){}
                    });