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

如何在liferay中获取portlet.xml的init参数?,xml,liferay,portlet,liferay-6,init-parameters,Xml,Liferay,Portlet,Liferay 6,Init Parameters,我在liferay portal 6中使用自定义porltet。我有一些全局变量,我想在整个portlet类中使用,因此我在portlet.xml文件中编写了该变量,如下所示 <init-param> <name>Host</name> <value>smtp.mail.yahoo.com</value> </init-param> <init-param> &l

我在liferay portal 6中使用自定义porltet。我有一些全局变量,我想在整个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本身而不是任何其他类访问的。这些参数不适用于所有其他类

因此,如果您希望访问其他类中的参数,而不是将参数作为参数从portlet类传递给类的方法(这里是localserviceinpl)

我建议的另一种方法是在
portal-ext.properties
文件中设置以下参数:

my.custom.host=smtp.mail.yahoo.com
my.custom.port=465
然后使用
PropsUtil
从此文件访问它。使用这种方法,这些属性将可用于此门户的所有portlet

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

或者,您甚至可以尝试在常量类中包含这些参数,如:

interface MyConstants {
    String HOST = "smtp.mail.yahoo.com";
    String PORT = "465";
}
如果您只想为一个portlet使用第二种方法,那么第二种方法将是最好的

我建议您考虑一下,为什么在

摘要中需要这些参数: 如果希望在运行时获取portlet的init参数,可以使用
com.liferay.portal.service.PortletLocalServiceUtil
获取portlet

然后您将获得
com.liferay.portal.model.Portlet的一个实例

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

public java.util.Map getInitParams();
代码片段: 在portlet中,一个在liferay服务器上运行的servlet,一个在服务器启动时运行的钩子,一个quartz作业,一个服务

可以调用以下代码来获取portlet的init param映射

import com.liferay.portal.model.Portlet;
导入com.liferay.portal.service.PortletLocalServiceUtil;
导入java.lang.String;
导入java.util.Map;
...
/*确定您的portlet的id是什么,您可以按如下所示进行操作,或者在页面中放置一个portlet后找到它,并使用类似firebug的工具检查它的id*/
字符串myPortletId=“myPortletName\u WAR\u myPortletWar”;
/*使用适当的服务调用获取实际的portlet模型对象*/
Portlet myPortletObject PortletLocalServiceUtil.getPortletById(myPortletId);
/*从portlet模型对象获取init参数的映射*/
Map initParamMap=myPortletObject.getInitParams();
/*现在,您可以像在任何其他地图上一样在地图上迭代*/
对于(字符串currentParamKey:initParamMap.keySet()){
字符串currentParamValue=initParamMap.get(currentParamKey);
/*做事*/
}
幕后原则: 在Liferay中,portlet需要注册才能使用。
部署时,门户会注册它,注册它的
init参数
一系列其他信息

最幸运的是,Liferay将因此将所有这些数据存储在其数据库中。
与Liferay存储在数据库中的几乎所有信息一样,这些信息可以通过Liferay服务访问

这些服务附带了一系列实用方法

  • 一些非常基本的(比如高级积垢)
  • 一些更特定于当前服务
在我的代码示例中,由于使用了一种通过
portletId
搜索portlet的方法,我获得了portlet对象。此
portletId
不是表
Portlet
的数据库主键
因此,Liferay自己负责关联
portletId
(实际上是它的名称),而不是强制要求主键,主键是一个无意义的数值

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

结论:
希望这有帮助;)

不管怎样,我已经像@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属性中使用自定义键给我空值。但是使用我在portlet属性中提到的这些键,我可以访问…thnx很多

Thanx以获得答案..我将实现它..然后给您反馈它不起作用..我得到的值为空,请查看我的更新版本问题..我刚刚描述了我的工作..正如你所说的..我已经更新了我的答案。它应该是
portal-ext.properties
而不是
portlet.properties
。根据您的要求,我建议您使用常量类。我将尝试找到一种从portlet中的
portal.properties
portlet.properties
获取值的方法。您对portlet属性文件的使用是正确的,您可以通过portlet ext properties获取此值,而不是通过portlet ext properties…因此请编辑您的答案,然后我将标记为answer..thanx。我很高兴它有所帮助。正如我提到的,您可以从portal-ext.properties访问。我在回答中没有提到portlet-ext.properties。此外,我还为您建议的
portlet.properties
添加了另一点:“您还可以将上述值放在portlet.properties中,并可以通过PortletProps案例进行访问。使用这种方法,它将仅适用于单个portlet。”。抱歉,但是我对你的回答不太理解。你能用一些例子解释一下吗?好的,我会在那天尽快在我的回答中加入更多的信息。好的..但是直到
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");