我在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"));
它给我空值..
答案 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 访问。
这些服务附带了许多实用方法。
在我的代码示例中,我得到了我的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.smtps.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很多