什么时候我们应该让Portlet类具有预定义的类和自定义类

时间:2011-12-12 06:27:29

标签: struts2 liferay portlet

这是我现有项目中的Portlet.xml。 有人可以告诉我什么时候我们应该让Portlet类有一个预定义的类和一个自定义类?

<portlet>
    <portlet-name>DataUpload</portlet-name>
    <display-name>DataUpload</display-name>
    <portlet-class>org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher</portlet-class>
    <init-param>
        <name>viewNamespace</name>
        <value>/view</value>
    </init-param>
</portlet>

<portlet>
    <portlet-name>Reports</portlet-name>
    <display-name>Reports</display-name>
    <portlet-class>com.tata.ReportAction</portlet-class>
</portlet>

1 个答案:

答案 0 :(得分:3)

这是一个充分的问题,很难完全回答。但是,有一些规则几乎总是遵循:

  • 如果你的portlet确实使用了一些Java框架(比如Struts 2,JSF),它几乎肯定会使用预定义的javax.portlet.GenericPortlet子类。所有处理都是由框架完成的,而portlet类的唯一目的是将请求重定向到框架。这种portlet类称为 bridge 。在您的示例中,您的网桥是org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher

  • 如果您的portlet确实使用了Liferay MVC portlet并且只在JSP中显示检索到的数据(不更新它们),那么您可能不需要编写自定义portlet类。您可能不需要另一个类,因为com.liferay.util.bridges.mvc .MVCPortlet类确实自动呈现JSP。我不会详细解释,但重点是。这是一种罕见的情况,所以不要过多考虑它。

  • 如果你的portlet 使用Liferay MVC,而是用普通的JSR 286 API编写,那么你可能需要编写自定义的portlet类。这是因为render()的默认doView()GenericPortlet等方法不足以呈现JSP。

  • 如果您的portlet不使用任何Java通用框架,使用Liferay MVC并通过更新它来处理数据,那么您可能需要一些MVCPortlet的自定义子类。这是因为数据处理是通过在操作阶段调用的方法来完成的。这些方法(通常称为“流程操作方法”)通过具有javax.portlet .ActionRequestjavax.portlet .ActionResponse类型的两个参数来识别。

在您的示例中,您有两个portlet:一个使用Struts(因此portlet类只调度对Struts 2的请求),另一个使用自定义portlet类。此portlet类可以扩展GenericPortletMVCPortlet。如果它使用GenericPortlet,那么拥有自定义类是不可避免的。如果它确实使用MVCPortlet,那么这个类可能有一些过程操作方法。

我敢打赌,我的答案过于抽象,但我希望它能为您提供其他问题的一些想法,更具体,更负责任。