如何在liferay中获取portlet.xml的init参数?

时间:2013-01-31 05:12:38

标签: xml liferay portlet liferay-6 init-parameters

我在liferay门户网站中使用自定义porltet 6.i有一些全局变量,我想通过我的portlet类使用,所以我已经在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>

在我的portlet动作类中完美运行的函数

publicList<String> ReadSmtpDataForMailNotification() {

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

现在的问题是当我使用portlet动作类执行该函数然后它的工作完美但是当我想在我的portlet类之外访问这个变量时...:在我的本地服务impl类中然后我无法访问那个变量值得一直是null ..如果有人可以建议我怎样才能在其他portlet类中获得initparam的值。

@Advaita Gosvami

在portlet.properties文件中写了my.custom.host = liferay.css.com

当我尝试使用以下

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

它给我空值..

3 个答案:

答案 0 :(得分:3)

<init-param>中的变量应由portlet本身访问,而不是由任何其他类访问。这些参数不适用于所有其他类。

因此,如果您想访问其他类中的参数,而不是将参数作为参数传递给类的方法(此处为本地服务impl),而不是来自portlet类。

我建议的另一种方法是将这些参数放在portal-ext.properties文件中,如:

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

然后使用PropsUtil从此文件访问它。使用此方法,这些属性将可用于此门户的所有portlet。

您还可以将上述值放在portlet.properties中,并可以通过PortletProps案例进行访问。使用这种方法,它仅适用于单个portlet。

或者您甚至可以尝试将这些参数放在Constant类中,如:

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

如果您只想要一个portlet,那么第二种方式将是最好的。

我建议考虑为什么在<init-param>中需要这些参数。

答案 1 :(得分:3)

摘要:

如果您想在运行时获取portlet的init-params,可以使用com.liferay.portal.service.PortletLocalServiceUtil来获取portlet。

然后你得到一个com.liferay.portal.model.Portlet的实例。

这是一个非常方便的对象,因为它为您提供了调用方便方法的可能性:

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

代码段:

在portlet中,在liferay服务器上运行的servlet,在服务器启动时运行的钩子,石英作业,服务......

可以调用以下代码来获取portlet的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中,需要注册一个portlet才能使用 部署后,门户网站会注册它,注册它的init-params一堆其他信息

最幸运的是,Liferay将把所有这些数据存储在它的数据库中。
就像Liferay在数据库中存储的所有信息一样,这些信息可以通过 LiferayService 访问。

这些服务附带了许多实用方法。

  • 一些非常基本的(就像一个高级的crud
  • 某些更具体的当前服务。

在我的代码示例中,我得到了我的portlet对象,这要归功于portletId搜索portlet的方法。此portletId不是表Portlet的数据库主键 因此,Liferay自己的业务是将portletId实际上,它的名称)联系起来,而不是强制要求主键,这是一个无意义的数字long

您可以使用其他方法获取portlet的对象,因为PortletLocalServiceUtil有许多可用的查找器。
我强烈建议您检查任何提供“大纲”视图的IDE中的文件$LIFERAY_PORTAL_SRC/portal-service/src/com/liferay/portal/service/PortletLocalServiceUtil.java,以便更好地了解所有可能性。

结论:

希望这会有所帮助;)

答案 2 :(得分: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");

它从我在自定义portlet中调用的任何地方给了我完美的价值

Thanx @Advaita Gosvami为您提供有价值的帮助。如果您在portlet属性中使用decalre自定义键,请将null值赋予我。但是如上所述我在portlet属性中使用此键可以访问... thnx很多