Как получить параметр инициализации portlet.xml в Liferay?

Я использую пользовательский porltet в моем портале liferay 6. У меня есть глобальная переменная, которую я хочу использовать в своих классах портлетов, поэтому я записал эту переменную в файл 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;
    }

Теперь проблема в том, что когда я извиняю функцию с классом действия портлета, она работает идеально, но когда я хочу получить доступ к этой переменной за пределами моего класса портлета. Например:- в моем классе impl локальной службы, тогда я не могу получить доступ к этой переменной и значению come всегда null.. поэтому, пожалуйста, если кто-нибудь может подсказать мне, как я могу получить значение initparam в другом, чем класс портлета.

@ Адвайта Госвами

записали my.custom.host=liferay.css.com в файл portlet.properties

и когда я пытаюсь получить значение с помощью следующего

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

это дает мне нулевое значение..

3 ответа

Решение

В любом случае, я сделал это, как сказал @Advaita Госвами ранее, с изменениями в 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");

это дало мне идеальную ценность из любого места, где я звоню в своем портлете

Спасибо @Advaita Госвами за вашу полезную помощь. Только в случае, если вы измените пользовательский ключ в свойствах портлета, предоставив мне нулевое значение. Но с этими ключами, как я уже упоминал выше в свойствах портлета, я могу получить доступ... спасибо много

Аннотация:

Если вы хотите получить init-параметры портлета во время выполнения, вы можете использовать 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.

Эти сервисы поставляются с кучей служебных методов.

  • Некоторые, очень простые (например, продвинутый crud)
  • Некоторые более специфичны для текущего сервиса.

В моем примере кода я получил свой объект портлета благодаря методу, который ищет портлеты portletId, это portletId не является первичным ключом базы данных таблицы Portlet,
Следовательно, Liferay занимается своим делом, связывая portletId (на самом деле это имя) вместо принудительного запроса первичного ключа, который является бессмысленным числовым long,

Вы можете использовать другие методы для получения объекта вашего портлета, так как PortletLocalServiceUtil имеет много доступных средств поиска.
Я настоятельно рекомендую вам проверить файл $LIFERAY_PORTAL_SRC/portal-service/src/com/liferay/portal/service/PortletLocalServiceUtil.java в любой IDE, которая предлагает "контурный" вид, чтобы получить лучшее представление обо всех его возможностях.

Заключение:

Надеюсь это поможет;)

Переменные в <init-param> предназначены для доступа к самому портлету, а не для любого другого класса. Эти параметры не для всех других классов.

Поэтому, если вы хотите получить доступ к параметрам в других классах, а не передавать параметры в качестве аргументов методу класса (здесь подразумевается локальная служба) из класса портлета.

Другой способ, который я хотел бы предложить, это иметь эти параметры в portal-ext.properties файл как:

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

А затем получить к нему доступ из этого файла, используя PropsUtil, При таком подходе эти свойства будут доступны для всех портлетов этого портала.

Вы также можете поместить вышеуказанные значения в portlet.properties и может получить доступ через PortletProps дело. При таком подходе он будет доступен только для отдельного портлета.

Или вы можете даже попытаться использовать эти параметры внутри класса Constant, например:

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

Этот второй способ будет лучшим, если вы хотите использовать его только для одного портлета.

Я бы посоветовал подумать, зачем вам эти параметры в <init-param>,

Другие вопросы по тегам