3

Liferayポータル6でカスタムportltetを使用しています。ポートレットクラス全体で使用したいグローバル変数があるため、その変数をportlet.xmlファイルに次のように記述しました..

<init-param>
        <name>Host</name>
        <value>smtp.mail.yahoo.com</value>
</init-param>

<init-param>
        <name>Port</name>
        <value>465</value>
</init-param>

私のポートレットアクションクラスで完璧に機能する機能

publicList<String> ReadSmtpDataForMailNotification() {

        List<String> ValuesListObj = new ArrayList<String>();
        ValuesListObj.add(this.getInitParameter("Host"));
        ValuesListObj.add(this.getInitParameter("Port"));
        return ValuesListObj;
    }

今の問題は、ポートレットアクションクラスで関数を実行すると完璧に機能しますが、ポートレットクラスの外部でこの変数にアクセスしたい場合です..eg :-ローカルサービスimplクラスでは、その変数と値にアクセスできませんcome は常に null です。ポートレット クラス以外の initparam の値を取得する方法を教えてください。

@アドヴァイタ・ゴスヴァミ

portlet.properties ファイルに my.custom.host=liferay.css.com を書きました

そして、次の値を取得しようとすると

 System.out.println("Property value : - " + PropsUtil.get("my.custom.host"));

それは私にnull値を与えます..

4

3 に答える 3

3

概要 :

実行時にポートレットのinit-paramsを取得する場合は、を使用com.liferay.portal.service.PortletLocalServiceUtilしてポートレットを取得できます。

次に、のインスタンスを取得しますcom.liferay.portal.model.Portlet

これは、便利なメソッドを呼び出す可能性を提供するため、非常に便利なオブジェクトです。

public java.util.Map<java.lang.String, java.lang.String> getInitParams();

コードスニペット:

ポートレットでは、liferayサーバーで実行されているサーブレット、サーバーの起動時に実行されているフック、クォーツジョブ、サービス...

次のコードを呼び出して、ポートレットのinit-paramマップを取得できます。

import com.liferay.portal.model.Portlet;
import com.liferay.portal.service.PortletLocalServiceUtil;
import java.lang.String;
import java.util.Map;

...

/* Determine what is your portlet's id, you can go as follows or find it after placing one in a page and check it's id with a tool like firebug */
String myPortletId = "myPortletName_WAR_myPortletWar";

/* Get the actual portlet model object with the appropriate service call */
Portlet myPortletObject PortletLocalServiceUtil.getPortletById(myPortletId);

/* Get the map of init-params from the portlet model object */
Map<String,String> initParamMap = myPortletObject.getInitParams();

/* You can now iterate on your map as on any other */
for (String currentParamKey : initParamMap.keySet()) {
    String currentParamValue = initParamMap.get(currentParamKey);
    /* do stuff */
}

舞台裏の原則:

Liferayでは、ポートレットを使用できるように登録する必要があります。
デプロイされると、ポータルはそれを登録し、それとinit-paramsの多くの情報を登録します。

この事実について最も幸運なのは、Liferayがそれらすべてのデータをデータベースに保存することです。
Liferayがデータベースに保存するほとんどすべての情報と同様に、これらの情報にはLiferayServiceからアクセスできます。

これらのサービスには、多数のユーティリティメソッドが付属しています。

  • いくつかの、非常に基本的な(高度なクラッドのような
  • 現在のサービスに固有のもの。

私のコード例では、によってポートレットを検索するメソッドのおかげで、ポートレットオブジェクトを取得しましたportletId。これportletIdは、テーブルのデータベースの主キーではありませんPortlet
したがって、Liferayは、意味のない数値である主キーを強制的に要求するのではなく、 portletId実際にはその名前long)を関連付けること自体がビジネスです。

PortletLocalServiceUtilには多くのファインダーが用意されているため、他のメソッドを使用してポートレットのオブジェクトを取得できます。「アウトライン」ビューを提供するIDEで
ファイルをチェックして、すべての可能性をよりよく理解することを強くお勧めします。$LIFERAY_PORTAL_SRC/portal-service/src/com/liferay/portal/service/PortletLocalServiceUtil.java

結論 :

お役に立てれば ;)

于 2013-02-04T10:06:10.053 に答える
3

の変数は<init-param>、他のクラスではなく、ポートレット自体によってアクセスされることを意図しています。これらのパラメーターは、他のすべてのクラス用ではありません。

そのため、ポートレット クラスからクラスのメソッド (ここではローカル サービス impl) にパラメータを引数として渡す以外のクラスのパラメータにアクセスする場合。

私が提案する別の方法は、これらのパラメーターを次のportal-ext.propertiesようなファイルに含めることです。

my.custom.host=smtp.mail.yahoo.com
my.custom.port=465

そして、を使用してこのファイルからアクセスしますPropsUtil。このアプローチでは、これらのプロパティをこのポータルのすべてのポートレットで使用できます。

上記の値を に入れ、ケースportlet.properties経由でアクセスすることもできますPortletProps。このアプローチでは、個々のポートレットでのみ使用できます。

または、次のような定数クラス内にこれらのパラメーターを含めることもできます。

interface MyConstants {
    String HOST = "smtp.mail.yahoo.com";
    String PORT = "465";
}

1 つのポートレットだけに使用する場合は、この 2 番目の方法が最適です。

でこれらのパラメータが必要な理由を考えてみることをお勧めします<init-param>

于 2013-01-31T06:02:04.273 に答える
0

とにかく、@ Advaita Gosvamiがportlet.propertiesの変更で前に言ったように、私はこのように行いましたが、カスタムキーでは機能しない方法がいくつかあります...

mail.session.mail.smtps.auth=true
mail.session.mail.smtps.host=smtp.gmail.com
mail­.session.mail.smtps.password=***********(your password here)
mail.session.mail.smtps.port=465
mail.session.mail.s­mtps.user=liferay.test@gmail.com(your emailId Here)
mail.session.mail.transport.protocol=smtp

そして私はそれを

PortletProps.get("mail.session.mail.smtps.host");

カスタムポートレットで呼び出す場所から完璧な価値を得ることができました

貴重なヘルプを提供してくれた@AdvaitaGosvamiに感謝します。ポートレットプロパティでカスタムキーをデカールするとnull値が表示されますが、このキーを使用すると、前述のポートレットプロパティでアクセスできます...thnx多くの場合

于 2013-02-05T09:13:14.200 に答える