2012-06-22 14 views
8

ポートレット名を使用してリソースのアクセス権を取得する必要があります。Liferayでポートレット名を使用してポートレットIDを取得する方法は?

私はIDではなくポートレットの名前を持っています。

リソースポートレットのリソース許可名は、そのポートレットのIDです。私はPortletテーブルをチェックしました、それはIDと他の情報しか持っていません。ポートレットの他の属性はどこに保存されますか。

ポートレットの名前を使用してポートレットのIDを取得する方法はありますか。私はすべてのポートレットを取得して比較するための作業がありますが、ポートレットの名前を使用してポートレットのIDを直接取得できる場合は役立ちます。

誰もが返信を知っているなら、それは大きな助けになるでしょう。あなたはポートレット名に基づいて、ポートレットIDが生成される方法として、よく見ると、あなたが答えになるだろうアドバンス

答えて

11

感謝。

これは一定のパターンであり、名前があればliferayのようにポートレットIDを構築できます。 Liferayはまた、ポートレット名の助けを借りてIDを構築します。

ポートレット-IDのパターン:たとえば<portletname in xml>_WAR_<servlet context name i.e. the war file without any special characters such as the hyphen>

: (Tomcatを使用している場合)、ポートレット名がportlet.xmlwebappsフォルダ内に生成されたファイルにMyWorkを定義されている場合は、MyWork-portletその後生成同上あるだろうMyWork_WAR_MyWorkportletとなります。

ライフサイクルソースコードがある場合、PortletLocalServiceImplprivate _readPortletXMLメソッドを見ることができます。

編集:
あなたは(ページのfriendly-url与えられた)特定のページ上のポートレットを見つけたいなら、あなたはこのanswerは役に立ちかもしれません。

+0

はあなたにプラカシュありがとうございます。しかし、私は複数の戦争が展開されている場合、どのようにサーブレットのコンテキスト名を知っているのだろうか?私はポートレットIDがどのように構築されているか知っていました。私は、多くのポートレットが異なるサーブレット・コンテキストの一部になるようにします。 – Vijayalakshmi

+0

同じインスタンス上の同じポートレットの複数の戦争?多くのポートレットがパッケージされた1つの戦争?環境について詳しく説明できれば助けになるでしょう。 –

+0

複数のポートレットがパッケージ化されていて1つの戦争が起こります。また、ポートレットIDにインスタンス情報が追加されることも確認しました。その場合の対処方法。異なるサーバーにデプロイすると、インスタンスIDが異なります。 – Vijayalakshmi

1

あなたはこれを試すことができます。

System.out.println("ID : " + themeDisplay.getPortletDisplay().getId()); 

System.out.println("InstanceID: " + themeDisplay.getPortletDisplay().getInstanceId()); 

System.out.println("Portlet Name: " + themeDisplay.getPortletDisplay().getPortletName()); 

を忘れないでください:

<% ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); 
    themeDisplay.getUser().getScreenName(); %> 
関連する問題