【问题标题】:how to get init param of portlet.xml in liferay?如何在liferay 中获取portlet.xml 的初始化参数?
【发布时间】:2013-01-15 03:35:20
【问题描述】:

我在我的 liferay 门户 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 操作类中完美运行的函数

publicList<String> ReadSmtpDataForMailNotification() {

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

现在的问题是,当我使用 portlet 操作类执行函数时,它的工作很完美,但是当我想在我的 portlet 类之外访问这个变量时......例如:- 在我的本地服务 impl 类中,我无法访问该变量并且来的值始终为空..所以请如果有人可以建议我如何在其他 portlet 类中获取 initparam 的值。

@Advaita Gosvami

已将 my.custom.host=liferay.css.com 写入 portlet.properties 文件

当我尝试使用以下内容获取值时

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

它给了我空值..

【问题讨论】:

  • 没有成功...我已经在我的 portlet-ext.properties mail.session.mail.smtp.host=kamabhavik 中写了这个,并尝试使用 System.out.println("STRING HERE : - " + PortletProps.get("mail.session.mail.smtp.host"));但它仍然为空

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


【解决方案1】:

&lt;init-param&gt; 中的变量旨在由 portlet 本身访问,而不是由任何其他类访问。这些参数不适用于所有其他类。

因此,如果您想访问其他类中的参数,而不是将参数作为参数从 portlet 类传递给类的方法(这里是本地服务实现)。

我建议的另一种方法是将这些参数放在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,那么第二种方式是最好的。

我建议考虑一下为什么在&lt;init-param&gt; 中需要这些参数。

【讨论】:

  • 感谢回答..我会实施它..然后给你反馈
  • 它不起作用..我得到的值为 null 请查看我更新的问题..我刚刚描述了我的工作..正如你所说的......
  • 我已经更新了我的答案。它应该是 portal-ext.properties 而不是 portlet.properties。按照您的要求,我建议使用常量类。我将尝试找出一种方法来从 portlet 中的 portal.propertiesportlet.properties 获取值。
  • 你对 portlet 属性文件是正确的,你不能通过 portlet-ext 属性获得这个值......所以请编辑你的答案,然后我将标记为 answer..thanx。
  • 我很高兴它有帮助。正如我所提到的,您可以从 portal-ext.properties 访问。我的回答中没有提到 portlet-ext.properties。此外,我还按照您的建议为portlet.properties 添加了另一点:“您还可以将上述值放在 portlet.properties 中,并且可以通过 PortletProps 案例访问。使用这种方法,它仅适用于单个 portlet。 ".
【解决方案2】:

摘要:

如果您想在运行时获取 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,一个在服务器启动时运行的钩子,一个quartz-job,一个服务......

可以调用下面的代码来获取一个portlet的init-param map

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
  • 一些更具体的当前服务。

在我的代码示例中,由于通过portletId 搜索portlet 的方法,我得到了portlet 对象。这个portletId不是表Portlet的数据库主键。
因此,Liferay 将portletId实际上是它的名字)关联起来是自己的事情,而不是强行询问主键,这是一个无意义的数字long

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

结论:

希望这会有所帮助;)

【讨论】:

  • 对不起,但我不能理解你的答案。你能用一些例子解释一下吗?
  • 好的,我会尽快在我的答案中添加更多信息。
  • 好的..但是直到那个pelase看到我对这个问题的回答......我得到了这个问题的解决方案。但如果你能给我适当的解决方案,那么它很可爱..thanx
  • 我试图让我的答案更清楚。希望这次会是;)如果它仍然模糊,请告诉我并解释我应该改进什么以获得完全可以理解的答案:p
  • thanx ...这很清楚 ...我已经以其他方式完成了这些,但我肯定会在接下来实现这个..
【解决方案3】:

正如@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 中调用的任何地方提供了完美的价值

感谢@Advaita Gosvami 为您提供有价值的帮助。以防万一您在 portlet 属性中贴上自定义键给我空值。但是使用这些键,正如我在上面在 portlet 属性中提到的那样,我可以访问...thnx 很多

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2010-11-30
    • 2011-08-15
    • 2016-08-20
    • 2021-08-17
    相关资源
    最近更新 更多