因为我们现在使用spring+mybatis开发项目,所以我想创建一个maven原型,它可以生成一个包含一些演示代码和测试代码的空白项目,告诉新手如何使用spring+mybaits和如何编写单元测试。但是现在我遇到了一些问题,在archetype-resources中有一个archetype-resources/src/main/resources/sql/myapp/DemoUser.xml,
<insert id="insertUser" useGeneratedKeys="true"
keyProperty="id">
insert into demo_user (mobile,nick) values (#{mobile},#{nick})
</insert>在执行mvn archetype:generate ...之后,它变成
insert into demo_user (mobile,nick) values (#mobile,#nick)然后我尝试了下面的方式来转义{,但在archetype-resources/pom.xml head add中失败了
#set( ${startbrace} = "{" )然后修改DemoUser.xml
insert into demo_user (mobile,nick) values (#${startbrace}mobile},#${startbrace}nick})但实际上它会生成以下代码
insert into demo_user (mobile,nick) values (#${startbrace}#obile},#${startbrace}#ick})所以我对这种情况感到非常困惑。我想知道如何正确转义{?
发布于 2016-07-11 15:51:28
这可能取决于您使用的Velocity版本。
使用Velocity 1.7+,原始问题不会发生((#{mobile},#{nick})按原样正确呈现),您的变通方法也可以正常工作。
我没有尝试用老版本的Velocity重现您的问题,但我认为问题来自于您在赋值中使用双引号的事实。所以你应该试一试:
#set( ${startbrace} = '{' )单引号的内容是而不是解析的,所以它肯定可以工作,即使是在旧的Velocity版本中也是如此。
发布于 2016-07-12 22:50:28
我尝试了下面的方法来解决这个问题。在src/main/resources/archetype-resources/pom.xml head中添加
#set( $P = '#' )然后在DemoUser.xml中
insert into demo_user (mobile,nick) values (${P}{mobile},${P}{nick})参考:http://velocity.apache.org/engine/devel/user-guide.html#escaping-invalid-vtl-references
#set( $D = '$' )
${D}{my:invalid:non:reference}https://stackoverflow.com/questions/38293218
复制相似问题