它会将相关的类打印为java.lang.Long
或java.lang.String
,但不会转换。
请帮助解决这个问题。
还有其他一些简单的方法吗?
在Java文件中设置
resolver.setAttirbutes("Long",Long.class);
resolver.setAttirbutes("String",String.class);
转换为VM文件
$Long.parseLong($String.valueOf(2))
答案 0 :(得分:5)
这不是静态方法的工作原理。 Java中是否存在Long.class.parseLong
?不。你没有给Long
添加静态引用,你正在放置处理反射和类加载的类对象。出于安全原因,Velocity甚至不允许您调用除Class
之外的getName
对象的任何方法。您希望将引用传递给Long
本身,而不是Long.class
,但不幸的是,这是不可能的。
但是,由于静态方法也可以在该类的任何实例上调用,所以您只需要在上下文中放置Long
对象,例如Long.MAX_VALUE
或Long.valueOf(0)
。< / p>
即便如此,由于Velocity只能存储对象而不是原始值,因此任何long
实际上都是Long
,而任何int
实际上都是Integer
,所以你可以这样做:
#set ($two = 2)
$two.class -> java.lang.Integer
#set ($twoLong = $two.longValue())
$twoLong.class -> java.lang.Long
#set ($threeLong = $twoLong.valueOf('3'))