Вызов методов класса (статических) из страницы просмотра скорости - PullRequest
15 голосов
/ 24 февраля 2010

Можете ли вы вызывать методы класса изнутри страницы просмотра?

В частности, те, которые не передаются в представление?

В asp.net MVC я могу сделать это:

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

Ответы [ 2 ]

19 голосов
/ 28 февраля 2013

Так как это попало в начало моего поиска в Google по этой теме, кажется, что люди могут захотеть увидеть обновленный ответ, когда они получают это в верхней части своего поиска ...

(нашел это здесь: 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) ) 
8 голосов
/ 10 октября 2016

Вот универсальный способ вызова любого статического метода любого класса без необходимости предварительного манипулирования контекстом:

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