`

grails整合freemarker插件的中文乱码解决及FreeMarker配置

阅读更多
如果你用的是utf-8编码,在grails中使用freemarker出现乱码,可以用以下方法解决。
打开C:\Documents and Settings\Administrator\.grails\1.1.1\projects\monitor\plugins\freemarker-0.1.1\FreemarkerGrailsPlugin.groovy文件(我的项目是monitor),把doWithSpring 方法改成以下
 def doWithSpring = {
        boolean developmentMode = !application.warDeployed

        freemarkerConfig(org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer) {
        		defaultEncoding="utf-8"
       if(developmentMode) {
                templateLoaderPath="file:${BuildSettingsHolder.settings.baseDir.absolutePath}/grails-app/views"
            } else {
                templateLoaderPath="/WEB-INF/grails-app/views"
            }
        }
        freemarkerViewResolver(org.springframework.grails.freemarker.GrailsFreeMarkerViewResolver) {
            prefix = ''
            suffix = '.ftl'
            order = 10
            contentType="text/html; charset=utf-8"
       }
    }




这样即可解决freemarker乱码问题。已经改过的freemarker插件在附件中。
当然,你需要在eclipse中把freemarker文件的编码设为utf-8,同时在页面头中加上<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />





其次,在Freemarker中有一些其他重要的配置,比如使用webwork时,可以用一个名为freemarker.properties的文件进行以下设定:

#locale=utf-8
template_update_delay=5
datetime_format=yyyy-MM-dd HH:mm:ss
date_format=yyyy-MM-dd
time_format=HH:mm:ss
number_format=0.######;
boolean_format=true,false
auto_import="/WEB-INF/ftl_lib/ponyjava.com/index.ftl" as p, "/WEB-INF/ftl_lib/jeecms/index.ftl" as cms
whitespace_stripping=true
#default_encoding=UTF-8
tag_syntax=auto_detect
url_escaping_charset=UTF-8
#struts.freemarker.templatesCache=true
#template_update_delay=60000


那么在Grails中要进行以上设定,应该怎么做呢?
首先freemarker.properties配置文件是不能用了,因为它是webwork才会加载的文件。我们可以通过设置FreemarkerGrailsPlugin.groovy文件来达到配置freemarker的效果。比如:

 def doWithSpring = {
        boolean developmentMode = !application.warDeployed

        freemarkerConfig(org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer) {
        		[color=red]freemarkerSettings=["number_format":"#","date_format":"yyyy-MM-dd" ][/color]        		defaultEncoding="utf-8"
			       if(developmentMode) {
			                templateLoaderPath="file:${BuildSettingsHolder.settings.baseDir.absolutePath}/grails-app/views"
			            } else {
			                templateLoaderPath="/WEB-INF/grails-app/views"
			            }
			        }
			        freemarkerViewResolver(org.springframework.grails.freemarker.GrailsFreeMarkerViewResolver) {
			            prefix = ''
			            suffix = '.ftl'
			            order = 10
			            contentType="text/html; charset=utf-8"
			       }
			    }



上述红字设置了数字格式永远不加","号(freemarker默认大数字每3位加一个逗号),以及日期格式。

分享到:
评论
2 楼 bluedest 2012-05-15  
tomorrow009 写道
其实是可以加载 外部配置文件的,参见这位老兄的文http://huncent.iteye.com/blog/421976

他的方法也是要改插件源码的,好像没什么特别好的不侵入的办法。
1 楼 tomorrow009 2011-07-19  
其实是可以加载 外部配置文件的,参见这位老兄的文http://huncent.iteye.com/blog/421976

相关推荐

Global site tag (gtag.js) - Google Analytics