Apache Velocity 模板语言 特殊字符${ $!{ 原样输出问题 转义符 # ! 无效

Velocity版本比较古老,1.7的,没试用新的2.2,不太清除是不是版本导致的问题

先来说下问题,常规情况下需要原样输出这几个特殊字符的话,只要直接在模板中输入就行了,会原样显示,例如

接下来说特殊情况

花括号后面跟了字符 此时就会识别为这是一个取值符,然后报错,生成时同样会报错

网上说的加转义符,加感叹号!,加#,都不可取(仅限1.7版本),虽然不会报错能够正常生成了,但是会把\ # !等额外字符同样输出出来

这是已经生成出来的文本,#和!一样的效果,原本需要得到的效果应该是这样的

虽然有人提过可以模板中建立变量,将变量值赋为特殊字符串,然后再取变量值

例如在中https://my.oschina.net/ouminzy/blog/1837890这篇文章中给出的样例

因为直接写#set(temp="${config.websiteCss}")这样的话,把{和字符隔断,这样就不会识别为取值器,所以作者给他拆分成两段

但是这个就需要每个有需要显示${xxxx}的文本的地方,都要建立两个变量,数量上翻了一倍,关键看着还费劲,强迫症表示一定有直接把${xxx}渲染在文件中的办法

于是找啊找,找不到,突然想到单引号这个神奇的东西!然后.....

得到

完美解决。

这里说下定义变量这个问题,将${xxxxx}这种字符串原样输出,原本不用这么麻烦,直接写在模板里,只要确认context里没有字段名和xxxxx一样就可以了,会原样输出,那为什么还要多此一举呢

因为上面这种结构的模板,完全不满足直接写的条件,首先,原文里他就是一段规则取值器

其次,在${xxxxxx后面紧跟的不是},而是一堆其他字符和特殊符号,直接写上去,编译报错生成报错

最后就是,这种情况还不能换行来处理,因为不确定换行之后会不会引起生成的文件被响应工具解析时会不会出错,所以只能靠定义变量来引入

但是定义的变量还不能直接把整串写完。不然依旧报错,于是才发现了单引号和双引号的区别,这里还要提一句单引号直接用在模板区域里也是无用的

这样依旧会报错,只有定义变量最后一个办法。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值