【问题标题】:Calling class methods (static) from inside a velocity view page从速度视图页面内部调用类方法(静态)
【发布时间】:2011-01-20 17:08:02
【问题描述】:

你可以从视图页面中调用类方法吗?

特别是那些没有传递到视图中的?

在 asp.net MVC 中我可以这样做:

<%= SomeClass.FixDateFormat(ViewData.Model.SomeClass.DateCreated) %>

【问题讨论】:

    标签: java velocity


    【解决方案1】:

    这是调用任何类的任何静态方法的通用方法,无需预先进行上下文操作:

    #‌​set($str='test')##
    #set($Base64=$str.class.forName('java‌​.util.Base64'))##
    ​$Base64.getEncoder()‌​.encodeToString($str‌​.getBytes('utf8'))
    

    【讨论】:

    • 这看起来应该可以工作,但使用Class.forName() 总是有一个缺点,即创建在编译时不可见的类的依赖关系,并且直到运行时才中断。对于 JDK 中的公共类来说没什么大不了的,但对于以后可能不在类路径上的类来说,这是一个潜在的痛点。例如,被重命名的类,或者是您以后停止使用的某些依赖项的子依赖项的类。
    • System.getenv() 怎么样?有没有办法通过这个 hacky 解决方案调用它?
    • @AleksandrKravets,它应该与Base64.getEncoder()‌​ 和System.getenv() 都是不可实例化类的公共静态方法一样工作。就我而言,它确实适用于最新的速度 1.7。您也可以尝试call static method via reflection 作为最后的手段。
    • @Vadzim 谢谢,它挽救了我的一天,我无法访问生成器 java,并且想知道如何从模板生成 uuid。
    【解决方案2】:

    由于这出现在我关于这个主题的谷歌搜索的顶部,似乎人们可能希望在他们的搜索顶部看到这个更新的答案......

    (在这里找到:http://velocity.10973.n7.nabble.com/Use-of-static-functions-td15126.html)

    在 Velocity 1.5 或更早版本中,您可以使用:

    #set( $String = '' )
    #set( $foo = $String.format('%.1f', $dataFedIn) )
    

    因为您总是可以在实例上调用静态方法。 :)

    但是,由于有些静态类是您无法使用的 创建实例(例如 java.util.Math),我们在 1.6 中添加了对 无实例的静态类方法:

    Java:

    context.put("String", String.class);
    

    速度:

    #set( $foo = $String.format('%.1f', $dataFedIn) ) 
    

    【讨论】:

    • Gus,你和 velocity.apache.org/engine/devel/apidocs/org/apache/velocity/… 在 Java 中都神秘地提到了 context.put(),但我花了一个小时试图弄清楚这意味着什么以及如何在我的 Spring MVC 控制器中执行类似的操作那。 “上下文”在哪里定义?它是什么课?谢谢!
    • 我无法谈论您的特定弹簧设置,但在这两种情况下,上下文都是 VelocityContext velocity.apache.org/engine/releases/velocity-1.7/… 的实例
    • 谢谢格斯。我仍然不知道如何在我的 Spring MVC 控制器中使用它,但这有效:final String constantsClassNameString = TranslationConstants.class .getCanonicalName(); modelAndView.getModel().put(FormConstants.TRANSLATION_CONSTANTS, new FieldMethodizer(constantsClassNameString));
    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多