简体   繁体   English

如何将javascript var值传递给Grails控制器?

[英]how to pass a javascript var value to a Grails controller?

I have found the following javascript code to get browser window size and it works great! 我找到了以下javascript代码来获取浏览器窗口大小,它工作得很好!

<script type="text/javascript">
<!--

 var viewportwidth;
 var viewportheight;

 // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight

 if (typeof window.innerWidth != 'undefined')
 {
      viewportwidth = window.innerWidth,
      viewportheight = window.innerHeight
 }

// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
 else if (typeof document.documentElement != 'undefined'
    && typeof document.documentElement.clientWidth !=
     'undefined' && document.documentElement.clientWidth != 0)
 {
       viewportwidth = document.documentElement.clientWidth,
       viewportheight = document.documentElement.clientHeight
 }

 // older versions of IE
 else
 {
       viewportwidth = document.body.clientWidth,
       viewportheight = document.body.clientHeight
 }
document.write('<p>Your viewport width is <b>'+viewportwidth+'x'+viewportheight+'</b>.</p>');
//-->
</script>

Now I need to pass it to a Grails controller so I can resize a image according to screen size. 现在我需要将它传递给Grails控制器,这样我就可以根据屏幕大小调整图像大小。

which is built using: 使用以下内容构建:

<div align="center" valign="middle">
<img src="${createLink(controller:'chart', action:'buildChart')}" />
</div>

How can I do so? 我怎么能这样做? Thanks in advance! 提前致谢!

If you choose to use jQuery you could write a controller that returns your image, something like this in your html: 如果您选择使用jQuery,您可以编写一个返回您的图像的控制器,如下所示:

<img id="picture"/>
....
....
<g:javascript>
    // Load something when DOM is fully loaded
    $(document).ready(function() {
       var width = $(window).width()
       var height = $(window).height()
       $('img#picture').attr('src','${createLink(controller: 'image', action: 'resize')}?width='+width+'&height='+height)
   })
</g:javascript>
....
</body>

And some controller code: 还有一些控制器代码:

class ImageController {

  def resize = {
     def width = params.int('width')
     def height = params.int('height')
     // ... resize your image and return your image in the output stream
  }
}

The above is entirely off the top of my head, so you have to fill in the blanks :-) 以上完全脱离了我的头脑,所以你必须填补空白:-)

Happy hacking. 快乐的黑客。

Use javascript to add hidden form fields containing the numbers you want. 使用javascript添加包含所需数字的隐藏表单字段。 From with in the grails controler use the request.getParameter("fieldName") to retrieve the values in the form of a string then convert to an int and do your resizing. 从grails控制器中使用request.getParameter(“fieldName”)以字符串形式检索值然后转换为int并进行调整大小。

createLink tag will allow params to be passed on that call to the controller action. createLink标记将允许params在该调用上传递给控制器​​操作。 Have your javascript determine the values and then plug them into hidden variables that can be referenced by the createLink tag. 让您的javascript确定值,然后将它们插入可由createLink标记引用的隐藏变量中。 jQuery has some great options for easily accessing DOM elements. jQuery有一些很好的选项可以轻松访问DOM元素。

For example, your img element could look like this: <img src="${createLink(controller:'chart', action:'buildChart', params:\\"['vpWidth' : document.getElementById(\\'vpWidth\\').value, 'vpHeight': document.getElementById(\\'vpHeight\\').value]\\")}" /> 例如,你的img元素可能如下所示: <img src="${createLink(controller:'chart', action:'buildChart', params:\\"['vpWidth' : document.getElementById(\\'vpWidth\\').value, 'vpHeight': document.getElementById(\\'vpHeight\\').value]\\")}" />

We use a similar technique to build remoteFunction method calls with Grails and jQuery. 我们使用类似的技术来构建使用Grails和jQuery的remoteFunction方法调用。 You may have to adjust the above example, it is untested. 您可能需要调整上面的示例,它是未经测试的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM