Grails支持动态编码/解码方法概念。Grails捆绑了一些标准的编解码器,Grails也为开发人员提供了一个贡献自己编解码器的简单机制,这些编解码器在运行时可以被识别。
编解码器类
一个Grails编解码器是个包含一个编码闭包,一个解码闭包或两者皆有。当一个Grails应用启用了,Grails框架会动态从grails-app/utils/目录加载编解码器。
Grails框架将在 grails-app/utils/目录下查找以Codec结尾命名的类名。例如Grails捆绑的其中一个标准编解码器就是HTMLCodec。
假如一个编解码器包含一个encode属性,该属性被赋予一个代码块,Grails会创建一个动态的encode方法,并把该方法添加到Object类,方法名表示了定义encode闭包的编解码器。
例如,HTMLCodec类定义了一个编码器代码块,因此Grails会把该闭包与名为encodeAsHTML的Object类相关联。
HTMLCodec类和URLCodec类也定义了解码块,所以Grails会把这些闭包与decodeHTML和decodeURL相关联的。
动态编解码器能在Grails应用的任何一个地方执行。
例如,考虑一下这种情况,一个报告文件含有一个叫description的属性,该属性包含了需要被转义显示在HTML文档的特殊字符。
GSP文档里,一种处理方法就是用如下的动态编码器编码description属性:${report.description.encodeAsHTML()}
执行解码使用value.decodeHTML()语句。