2016-02-08 6 views
0

У меня есть проект темы в liferay. Я создал новую таблицу под названием colors в моей базе данных MySQL liferay. Таблица цветов приведена нижеLiferay access DB table в теме: Нет bean с именем «com.colors.themes.service.ColorLocalService» определено

enter image description here

На самом деле у меня есть требование, что конкретный файл CSS должен быть загружен в теме на основе значения цвета таблицы, состояние которого верно, и мой шаблон скорости должен быть несколько, как, как показано ниже

#set ($myColorService = $serviceLocator.findService("com.colors.themes.service.ColorLocalService")) 
#set ($myColor = $myColorService.fetchActiveColor()) 
#if ($myColor == "blue") 
<link href="$css_folder/themes/blue.css" rel="stylesheet" type="text/css"/> 
#elseif ($myColor == "orange") 
<link href="$css_folder/themes/orange.css" rel="stylesheet" type="text/css"/> 
#else 
<link href="$css_folder/themes/green.css" rel="stylesheet" type="text/css"/> 

следующие вещи нечто, которые я сделал до сих пор

  • у меня есть создал проект построителя услуг (theme_service-portlet) для таблицы . service.xml показан ниже

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 6.2.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_6_2_0.dtd"> <service-builder package-path="com.colors.themes"> <author>user</author> <namespace>theme</namespace> <entity name="Colors" local-service="true" remote-service="true"> <column name="colorId" type="long" primary="true" /> <column name="colorName" type="String" /> <column name="status" type="boolean" /> <finder return-type="Collection" name="Colors"> <finder-column name="status" /> </finder> </entity> </service-builder>

  • соорудил обслуживание и банка (theme_service-portlet-service.jar) генерируются при LIB папки.

  • Скопируйте theme_service-portlet-service.jar и разместите его под именем liferay-portal-6.2-ce-ga2\tomcat-7.0.42\lib\ext.
  • В portal_normal.vm я использовал следующий код:
#set ($myColorService = $serviceLocator.findService("com.colors.themes.service.ColorLocalService")) 
#set ($myColor = $myColorService.fetchActiveColor()) 
#if ($myColor == "blue") 
<link href="$css_folder/themes/blue.css" rel="stylesheet" type="text/css"/> 
#elseif ($myColor == "orange") 
<link href="$css_folder/themes/orange.css" rel="stylesheet" type="text/css"/> 
#else 
<link href="$css_folder/themes/green.css" rel="stylesheet" type="text/css"/> 
  • Restarted котом сервер

Но я получаю следующее исключение

04:44:55,896 ERROR [http-bio-8080-exec-3][ServiceLocator:39] com.liferay.portal.kernel.bean.BeanLocatorException: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'com.colors.themes.service.ColorLocalService' is defined 
com.liferay.portal.kernel.bean.BeanLocatorException: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'com.colors.themes.service.ColorLocalService' is defined 
    at com.liferay.portal.bean.BeanLocatorImpl.locate(BeanLocatorImpl.java:122) 
    at com.liferay.portal.kernel.bean.PortalBeanLocatorUtil.locate(PortalBeanLocatorUtil.java:98) 
    at com.liferay.portal.template.ServiceLocator.findService(ServiceLocator.java:36) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389) 
    at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378) 
    at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270) 
    at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:262) 
    at org.apache.velocity.runtime.parser.node.ASTReference.value(ASTReference.java:507) 
    at org.apache.velocity.runtime.parser.node.ASTExpression.value(ASTExpression.java:71) 
    at org.apache.velocity.runtime.parser.node.ASTSetDirective.render(ASTSetDirective.java:142) 
    at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336) 
    at org.apache.velocity.Template.merge(Template.java:328) 

Может ли кто-нибудь сказать мне какое-нибудь решение для этого

ответ

2

Прежде всего, у вас есть уровень ServiceBuilder, который предоставляет ваш уровень доступа к данным; эта часть хороша.

Ваш код для темы в основном правильный. Вы должны использовать ServiceLocator для поиска вашей службы, но вам не хватает контекста сервлета, предоставляющего эту услугу. Например, если плагин предоставления услуги в цветовом сервис-portlet.war, то локатор вызова службы будет выглядеть следующим образом:

#set ($myColorService = $serviceLocator.findService("color-service-portlet", "com.colors.themes.service.ColorLocalService")) 

исключением того, что вы видите, это потому, что вы используете форму Портала найти портал, но, конечно, портал не экспортирует эту услугу, поэтому вы получаете исключение BeanLocatorException.

1

Вам необходимо включить доступ к услугам со скоростью.

Чтобы включить его, отредактируйте значение journal.template.velocity.restricted.variables в portal-ext.properties.

Как это

journal.template.velocity.limited.variables =

+0

Я сделал это .... вы можете увидеть мой полный код на https://github.com/nidhishkrishnan/customfunctions-portlet –

+0

Я делаю что-то неправильно –

+0

@dnebing может быть прав. Посмотри на это. https://docs.liferay.com/portal/6.2/javadocs-all/com/liferay/portal/template/ServiceLocator.html Вам может потребоваться передать контекст в качестве параметра. Я в этом случае, вроде #set ($ myColorService = $ serviceLocator.findService («customfunctions-portlet», «com.colors.themes.service.ColorLocalService»)) – aritzg

 Смежные вопросы

  • Нет связанных вопросов^_^