4

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..

4

2 回答 2

5

在您的 Liferay 资源中,您可以找到com.liferay.portal.velocity.VelocityVariablesImpl.

此类位于portal-impl/src/com/liferay/portal/velocity/VelocityVariablesImpl.java.

如果您检查速度上下文的所有条目(如 行velocityContext.put(String key, Object value)),特别是insertVariables方法中的那些,您会看到这会将您的 httpServletRequest 暴露在 name 下"request"

因此,在您的模板中,您可以像访问任何其他速度上下文对象一样使用 key 访问您的请求对象$request

然后,该对象将可用于它的所有方法和属性(如果是公共的)。

所以就这样做

$request.getServerName()

$request.getServerPort()

此外,如果您想将速度变量设置为其中之一,只需执行以下操作

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

然后,您将能够$my_amazing_variable用作任何常规速度文字。

希望这可以帮助。


请注意!

请注意,您无法访问 Liferay 中所有类型的速度模板下的完全相同的变量和宏集。有不同的套装

  • 主题模板
  • 布局模板
  • 网页内容模板
于 2013-02-04T13:58:13.403 回答
1

我已经使用以下代码创建了我的 URL 用于登录弹出窗口。谢谢 Ar3s。

#set($protocol = "http://")
#set($host = "$request.getServerName()")
#set($port = "$request.getServerPort()")
#set($column = ":" )
#set($url = "/c/portal/login?p_l_id=10858" )
#set($hrefurl = "$protocol$host$column$port$url")


<a class="sign-in" data-redirect="false" href="$hrefurl" id="yui_patched_v3_11_0_1_1420097083820_231" role="menuitem" title=""> <span id="yui_patched_v3_11_0_1_1420097083820_865" class="nav-item-label"> Sign In </span> </a>
于 2015-01-06T13:49:46.720 回答