How to get Server Name and Server Port from Liferay velocity template?

Boat picture Boat · Feb 2, 2013 · Viewed 7.9k times · Source

In jsp page we can get Server Name and Server Port by using request.getServerName() and request.getServerPort().`

As we can't get HttpServletRequest from Liferay velocity template, Is there any other way to get both Server Name and Server Port ? Please answer with a small code snippet..

Answer

Ar3s picture Ar3s · Feb 4, 2013

In your Liferay sources you can find com.liferay.portal.velocity.VelocityVariablesImpl.

This class is placed under portal-impl/src/com/liferay/portal/velocity/VelocityVariablesImpl.java.

If you check all entries to velocity context (lines like velocityContext.put(String key, Object value)) and specially the ones in the insertVariables method, you'll see that this exposes you httpServletRequest under the name "request".

Therefore, in your template you access your request object as any other velocity context object with the key $request.

This object will, then, be usable with all it's methods and properties (if public).

So just do

$request.getServerName()

and

$request.getServerPort()

Furthermore, if you want to set a velocity variable to one of those, just do as follows

#set ($my_amazing_variable = $request.getServerPort())

You'll then be able to use $my_amazing_variable as any regular velocity litteral.

Hope this helps.


NOTA BENE !

Note that you do not have access to the exact same set of variables and macros under all types of velocity templates in Liferay. There are different sets for

  • theme templates
  • layout templates
  • web-content templates