使用Grails 2.0.1进行qrcode-0.1

时间:2012-03-01 14:15:54

标签: grails grails-plugin

看看这是我的问题:我已经更新到Grails 2.0.1,现在我必须制作一个二维码。我已经安装了qrcode插件0.1,但它无法正常工作。我正在使用标签:

<qrcode:image text="${createPromoInstance.id}" />

但它似乎没有做任何事情。我使用谷歌浏览器调试,我意识到在“元素”标签中,标签正在更改<call></call> 昨天我问过这个问题,有人说我插件有一些与Grails 2.0.1不兼容的错误,他给了我一些关于我能做些什么的建议。 例如,我像这样编辑了QRController:

class QrcodeController{
   QRCodeRenderer qrcodeRenderer = new QRCodeRenderer()

   def index = {
       qrcodeRenderer.renderPng(response, request.getHeader("REFERER"), 300i)
   } //It doesn't have any change

   def url = {
      String uri = params.u
      String size = getSize(params)
      qrcodeRenderer.renderPng(response, uri, size.toInteger().intValue())
   } //it doesn't have any change

   protected String getSize(Map params){
      String size = params.s
      if(!size || size.matches(/\D\)) {size = "128"}
      return size
   } //I have added the "protected word"

   def text = {
      String content = params.t //it used to be params.text
      String size = getSize(params)
      qrcodeRenderer.renderPng(response, content, size.toInteger().intValue())
   }
}

并且他说如果我做出这些改变它会起作用,但不,它不会!我试图在一个空的gsp中渲染代码,只是为了尝试它:

<%page contentType="text/html;charset=UTF-8" %>
<html>
<head>
    <title><title>
<head>
<body>
   <div>
      <qrcode:image text="${createPromoInstance.id} />
   </div>
</body>
</html>

据我所知它应该有效,但事实并非如此。有谁知道我做错了什么?我必须做其他事情才能获得渲染的二维码? 谢谢您的帮助! 了Jonatan!

1 个答案:

答案 0 :(得分:0)

我找到了答案......如果有人需要,我会把它留在这里。 为了实现这个目标,你需要像我之前写的那样做一些改变。

protected String getSize(Map params{ //it used to be String getSize(Map params)
   String size = params.s
   if (!size || size.matches(\/D/) {size = "128"}
   return size
}

def text = {
  String content = params.t //it used to be params.text
  String size = getSize(params)
  qrcodeRenderer.renderPng(response, content, size.toInteger().intValue())
}

但这不是一切,你必须改变BuildConfig中的其他内容,如下所示:

//find the plugin call
plugins{
   //this is how my plugins call looks like, here you might see the calls of the plugins you have installed
   runtime: ":hibernate:$grailsVersion"
   runtime: ":jquery:1.7.1"
   runtime: ":resources:1.1.6"
   //and you gotta add this
   compile: ":qrcode:0.1"
   /*.
   .
   .*/
   build: ":tomcat:$grailsVersion"
 }

然后你必须转到插件taglib“QRCodeTagLib”并替换它:

def image = {attrs->
  def size = attrs.height?:attrs.width
  String text = attrs.text
  String src = createLink(controller:'qrcode',action:'text',params:[t:text,s:size])
  //it used to be like this
  /*def mkp = new groovy.xml.MarkupBuilder(out)
       mkp{
          img(alt:url, src:src)
       }
  */
  //and now it looks like this
  out <<"<img alt=\"${text}\" src=\"${src}\"/>"
}

就是这样,您的QR码将被渲染!

希望它对任何人都有用! !!了Jonatan PD:这个代码的功劳不是我的,有人在grails facebook页面上帮助了我!非常感谢Ingo。 :) 啊!其他的事情......他在引导程序中添加了一些东西,但它对我没用,在他的引导程序中:

QRCode m = new QRCode()
m.save()

尝试一下,让我知道这是否适合你! :)