2012-06-22 3 views
8

У меня есть требование получить разрешение ресурса, используя имя портлета.Как получить идентификатор портлета, используя имя портлета в Liferay?

У меня будет имя портлета, а не идентификатор.

Имя ресурса для портлета - это идентификатор портлета. Я проверил таблицу Portlet, у нее есть только идентификатор и другая информация. Где будут сохранены другие атрибуты портлета ?.

Есть ли способ, которым я могу получить Идентификатор портлета, используя имя портлета. У меня есть workaroud, чтобы получить все портлеты и сравнить, но если я могу напрямую получить идентификатор портлета, используя портлет, это будет полезно.

Его срочный, если кто-либо знает ответ pls назад, он будет очень полезен.

Заранее спасибо

ответ

11

Если вы посмотрите внимательно, как к тому, как Id портлетов генерируется на основе портлетов имени, вы получите ответ.

Это постоянный шаблон, за которым следуют, поэтому вы можете построить идентификатор портлета, например, liferay, если у вас есть имя. Liferay также создает идентификатор с помощью имени портлета.

Структура портлета-ID: <portletname in xml>_WAR_<servlet context name i.e. the war file without any special characters such as the hyphen>

Например: Если ваше имя портлета MyWork определено в portlet.xml и сгенерированный файл в папке webapps (если вы используете Tomcat) является MyWork-portlet то результирующая Id будет be MyWork_WAR_MyWorkportlet.

Теперь, если у вас есть исходный код liferay, вы можете посмотреть PortletLocalServiceImplprivate _readPortletXML.

Edit:
Если вы хотите, чтобы найти портлетов на определенной странице (с учетом friendly-url страницы), то вы можете найти это answer полезно.

+0

Спасибо Пракаш. Но как я узнаю имя контекста сервлета, которое является именем военного файла, если у меня развернуто несколько войн. Я знал, как создается идентификатор портлета. У меня будет много портлетов, входящих в разные контексты сервлета. – Vijayalakshmi

+0

Несколько войн того же портлета в одном экземпляре? или Одна война с множеством портлетов упакованы? Если вы можете уточнить об окружающей среде, было бы полезно –

+0

Одна война с несколькими упакованными портлетами, которые не поддаются действию. Я также заметил, что в идентификаторе портлета будет добавлена ​​информация о экземпляре. как обращаться в этом случае. Если я развожу его на разных серверах, идентификатор экземпляра будет другим. – 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(); %> 
Смежные вопросы