0

liferay にテーマ プロジェクトがあります。liferay MySQL データベースに、colors という新しいテーブルを作成しました。色の表を以下に示します

ここに画像の説明を入力

実際には、ステータスが true であるカラー テーブルの値に基づいて、特定の 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 フォルダ配下に jar( ) が生成されます。

  • をコピーしてフォルダ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"/>
  • Tomcatサーバーを再起動しました

しかし、次の例外が発生しています

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)

誰かこれの解決策を教えてください

4

2 に答える 2

2

まず、データ アクセス層を公開する ServiceBuilder 層があります。この部分は良いです。

テーマのコードはほとんど正しいです。ServiceLocator を使用してサービスを検索する必要がありますが、サービスを提供しているサーブレット コンテキストがありません。たとえば、サービスを提供するプラグインが color-service-portlet.war にある場合、サービス ロケーターの呼び出しは次のようになります。

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

表示されている例外は、ポータルのフォームを使用してポータル サービスを検索しているためですが、もちろんポータルはそのサービスをエクスポートしていないため、BeanLocatorException が発生します。

于 2016-02-09T04:20:12.997 に答える
1

速度からのサービスへのアクセスを有効にする必要があります。

これを有効にするには、portal-ext.properties の journal.template.velocity.restricted.variables の値を編集します。

このような

journal.template.velocity.restricted.variables=

于 2016-02-09T11:51:47.010 に答える