留言板

How to run Dynamic Query in Velocity template ?

Harsh Kanakhara,修改在6 年前。

How to run Dynamic Query in Velocity template ?

Junior Member 帖子: 74 加入日期: 17-4-6 最近的帖子
I want to get asset category object based on category name. so that I have write dynamic query for it. It is working fine in the controller but not working in my ADT.

Here is the query.

#set ($assetCategoryClass = $portalUtil.getClass().forName("com.liferay.portlet.asset.model.AssetCategory"))
#set ($pfu = $portalUtil.getClass().forName("com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil"))
#set ($dqfu = $portalUtil.getClass().forName("com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil"))
#set ($q = $dqfu.forClass($assetCategoryClass).add($pfu.forName("name").eq($categoryName)))
Size : $assetCategoryLocalService.dynamicQuery($q).size()


I have also override the velocity.engine.restricted.variables property. Nothing is restricted here.

What I am doing wrong ? Can any one help please emoticon
thumbnail
Jorge Díaz,修改在6 年前。

RE: How to run Dynamic Query in Velocity template ?

Liferay Master 帖子: 753 加入日期: 14-1-9 最近的帖子
Which error are you having?

Instead of using $dqfu.forClass($assetCategoryClass), try calling AssetCategoryLocalServiceUtil.dynamicQuery(), see: https://docs.liferay.com/portal/6.2/javadocs/com/liferay/portlet/asset/service/AssetCategoryLocalServiceUtil.html

That method returns a DynamicQuery object
Harsh Kanakhara,修改在6 年前。

RE: How to run Dynamic Query in Velocity template ?

Junior Member 帖子: 74 加入日期: 17-4-6 最近的帖子
Thanks Jorge Díaz for your guidance. Now I am successfully getting dynamic query object. I am also getting PropertyFactoryUtil using serviceLocator.

But when I try to execute the query it is just printing the line not giving the result.

#set ($pfu = $serviceLocator.findService("com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil"))
#set ($q = $assetCategoryLocalService.dynamicQuery().add($pfu.forName("name").eq($getterUtil.getString($scil))))
Result : $assetCategoryLocalService.dynamicQuery().add($pfu.forName("name").eq($getterUtil.getString($scil))).list().size()
Size : $assetCategoryLocalService.dynamicQuery($q).size()


Output

Result : $assetCategoryLocalService.dynamicQuery().add($pfu.forName("name").eq($getterUtil.getString($scil))).list().size()
Size : $assetCategoryLocalService.dynamicQuery($q).size()
thumbnail
Orin Fink,修改在6 年前。

RE: How to run Dynamic Query in Velocity template ?

Junior Member 帖子: 65 加入日期: 10-3-25 最近的帖子
We too are seeing an issue with the PropertyFactoryUtil not working in an ADT for the Category Navigator. The following snippet of code leaves the $property variable uninitialized. We've tried this on two different portals, in both ADTs and in velocity display templates without luck. Is it possible that the PropertyFactoryUtil isn't set up to work well in a velocity template in ADT or content display template?

#set ( $assetCategoryLocalService = $serviceLocator.findService("com.liferay.portlet.asset.service.AssetCategoryLocalService") )
<pre> $assetCategoryLocalService </pre>

#set ( $propertyFactoryUtil = $utilLocator.findUtil("com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil") )
<pre> $propertyFactoryUtil </pre>

#set( $property =  $propertyFactoryUtil.forName("parentCategoryId") )
<pre> $property </pre>