2012-06-19 4 views
4

В настоящее время я генерировать URL в другой портлет таким образом:Генерация URL в другом портлета в Liferay

<liferay-portlet:actionURL var="custom" portletName="portlet2_WAR_portlet2"> 
    <portlet:param name="action" value="advanced"/> 
    <portlet:param name="value" value="321"/> 
</liferay-portlet:actionURL> 

наиболее важной частью является portletName аргумент. Я строю его так же, как они сказали по телефону Liferay's page. Проблема в том, что вручную создание portletName ужасно. Представьте себе опечатку, смену названия ...

Итак, мой вопрос: существует ли класс утилиты jsp tag (или аналогичный), который способен автоматически создавать правильное имя портлета (учитывая некоторую информацию из программист, например, имя портлета).

Одна вещь: мои портлеты являются одиночными, поэтому нет INSTANCE param необходим.

ответ

3

, чтобы получить правильное имя портлета, вы должны иметь свой идентификатор.

Liferay обеспечивает com.liferay.portal.service.PortletLocalServiceUtil обслуживание использование класс и способ getPortletById(String id). Это даст вам объект com.liferay.portal.model.Portlet и из метода getPortletName() вы получите имя портлета.

Идентификаторы встроенных портлетов доступны в файле com.liferay.portal.util.PortletKeys, поэтому вам не нужно записывать идентификаторы (по крайней мере, для встроенных портлетов).

+0

Но еще раз мы не можем сделать опечатку с идентификатором? ;-) –

+0

Вам нужно предоставить по крайней мере что-то :), опечатку вы можете сделать во что угодно! : D, чтобы ошибаться человек! :). Но, чтобы получить идентификаторы портлетов встроенных портлетов, есть один интерфейс/класс, который содержит Enum имени и идентификатора портлета, сообщит вам, как только я получу его. –

+0

Получил его, пожалуйста, используйте com.liferay.portal.util .PortletKeys, это содержит отображение класса портлета и идентификаторов. Итак, теперь для встроенного портлета вам не нужен жесткий код, у вас будет от PortletKeys.BLOGS или что-то еще, и вы получите идентификатор, с этого идентификатора вы получите объект Portlet и так далее. Принять истину (как ответ) –

3

Имена портретов практически не меняются, даже liferay использует постоянный класс (PortletKeys.java) для хранения идентификаторов портлета и часто использует его.

Его как первичный ключ для портлета, если он изменяется, что может означать, что это новый портлет.

Так что, если ваш портлет зависит от портлета третьей стороны, а затем изменится идентификатор/имя портлета, я не вижу другого способа, кроме как изменить код, чтобы он соответствовал этому.

Если есть еще один хороший способ сделать это, я также буду рад узнать об этом.

+0

вы предоставляете ответ или комментарий? :) –

+0

Отклик :-D –

+0

хм .. хорошо, что ты нашел .. Я также отредактировал мой ответ! –

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