我正在为我的liferay主题编写速度模板,我想知道是否可以在速度模板中创建一个新对象.
原因是在liferay中没有在上下文中注册的contextTool,我真的希望能够在给定时间检查模板中存在的变量.有一个很酷的宏,但不幸的是它使用了contexttool.
我想做点什么:
#set($contextTool = new ContextTool())
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是随生命线主题提供的java代码,该主题能够在模板上下文中添加内容.但我不知道这是怎么回事...... ;-)
在jsp页面我们可以通过request.getServerName()和request.getServerPort()获取Server Name和Server Port。
由于我们无法从 Liferay 速度模板中获取 HttpServletRequest,还有其他方法可以同时获取 Server Name 和 Server Port 吗?请用一个小代码片段回答..
我想创建一个使用新页面Web Content Display与Velocity Templates和Structures.
在我的页面上,我希望有多个选项卡,并且每个选项卡上需要以编程方式从现有portlet的模板添加.
我知道如何将现有的portlet添加到我的主题,($theme.runtime("portlet_id"))但我找不到将portlet添加到速度模板的方法,因为$theme对象在Web内容显示模板中不可用.
你能否告诉我是否可以在模板中添加一个portlet?
如果有,怎么样?
谢谢.
如何使用自定义的服务方法,Liferay的主题,在速度文件一样init_custom.vm,portal_normal.vm等等.
我看到liferay在文件中提供了许多辅助实用程序类的变量,例如$portalUtilfor PortalUtil,$getterUtilfor GetterUtil等等init.vm.
那么有可能获得我的自定义服务的实例,com.my.custom.service.MyCustomLocalServiceImpl如liferay 的实例或服务UserLocalServiceImpl吗?
这是一些伪代码,用于了解我需要的内容:
// this code calls method from MyCustomLocalServiceImpl class to fetch items
#set ($listOfItems = $myCustomLocalServiceUtil.getAllItems())
// this code calls method from UserLocalServiceImpl class to fetch users
#set ($listOfUsers = $userLocalServiceUtil.getUsers(0, 99))
Run Code Online (Sandbox Code Playgroud)
环境:Liferay 6.1 CE GA1
如何访问VM模板中URI中传递的GET变量?
这仅在加载小部件URL时有效:
$request.get("parameters").get("fav").get(0)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个可以使用友好URL的简洁解决方案.
这是我的测试模板:
<br><br><br>
#set($url = $request.attributes.CURRENT_URL)
<h2>url: $url</h2>
#set($favs = $url.split("fav="))
favs: $favs<br>
favs.size(): $favs.size() <br>
#if($favs.size() > 1)
#set($fav1 = $favs.get(1).split("&").get(0))
fav1: $fav1<br>
#else
No fav!
#end
#if($favs.size() > 2)
#set($fav2 = $favs.get(2).split("&").get(0))
fav2: $fav2<br>
#end
#set($favs2 = $httpUtil.getParameterMap($url, "fav"))
favs2: $favs2
<hr>
<h3>Fav?</h3>
<form method="get">
<input type="checkbox" name="fav" value="dave"/> Dave<br>
<input type="checkbox" name="fav" value="nate"/> Nate<br>
<input type="checkbox" name="fav" value="taylor"/> Taylor<br>
<input type="submit" value="Send"/>
</form>
<hr>
<div style="font-size: 9px;">request: $request</div>
Run Code Online (Sandbox Code Playgroud) 我正在通过为结构添加新字段来更改我的liferay速度模板.例如'heading1'然后将这个新字段添加到模板:
<h1>Heading is: $heading1.data</h1>
Run Code Online (Sandbox Code Playgroud)
但如果结构领域尚未填补,结果是:
标题是:$ heading1.data
所以我想我可以解决这个问题:
#if($heading1.data!="")<h1>Heading is: $heading1.data</h1>#end
Run Code Online (Sandbox Code Playgroud)
但结果仍然是:
标题是:$ heading1.data
如果我打开网页内容并发布它然后结果是正确的,它没有显示任何内容,但我不想找到每个类似的网页内容并开始手动发布.
那么有没有办法检查标题是否未填充?
谢谢.
我正在尝试获取用户的个人资料图片并将其显示在我的 liferay 主题中。到目前为止,我已经能够User通过速度$user变量访问对象。用户模型有一个被调用的方法getPortraitUrl(),该方法将其ThemeDisplay作为参数。我在 liferay 文档中读到,在themeDisplay使用主题时,该对象在运行时可用,但我似乎无法做到这一点。
我尝试了几种不同的方法来获取themeDisplay对象,但它们似乎都不起作用:
$theme$themeDisplay$request.get("theme-display")$theme_display... 以及其他几种不返回任何内容的方法。
$user.getPortraitUrl($themeDisplay) 是我正在努力实现的目标。
任何帮助将不胜感激
我正在尝试使用Java代码重定向到其他页面,并且不为什么不将其重定向。下面是下面的代码
ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
PortletConfig portletConfig = (PortletConfig) actionRequest.getAttribute("javax.portlet.config");
String portletName = portletConfig.getPortletName();
PortletURL successPageURL = PortletURLFactoryUtil.create(
actionRequest, portletName+ "_WAR_" + portletName + "portlet",
themeDisplay.getPlid(), PortletRequest.RENDER_PHASE);
successPageURL.setParameter("jspPage", LibraryConstants.PAGE_SUCCESS);
actionResponse.sendRedirect(successPageURL.toString());
Run Code Online (Sandbox Code Playgroud)
它没有重定向到页面。请帮助检查代码是否正确。
谢谢。
liferay liferay-6 liferay-theme liferay-velocity liferay-ide