0

我对 doView() 方法的访问有疑问。我使用 Liferay 6.3 作为 CMS、ICEFACES 3.3.0 和 tomcat 7 编写了一个 portlet。我使用了liferay-faces-bridge以便在 Liferay 中使用 Icefaces 框架。出于这个原因,我以这种方式设置了 portlet.xml:

<portlet>
            <portlet-name>FinalTest</portlet-name>
            <display-name>FinalTest</display-name>
            <portlet-class>org.portletfaces.bridge.GenericFacesPortlet</portlet-class>
            <init-param>
                <name>javax.portlet.faces.defaultViewId.view</name>
                <value>/index.xhtml</value>
            </init-param>
            <expiration-cache>0</expiration-cache>
            <supports>
                <mime-type>text/html</mime-type>
            </supports>
            <portlet-info>
                <title>FinalENELTest</title>
                <short-title>FinalENELTest</short-title>
                <keywords>FinalENELTest</keywords>
            </portlet-info>
            <security-role-ref>
                <role-name>administrator</role-name>
            </security-role-ref>
            <security-role-ref>
                <role-name>guest</role-name>
            </security-role-ref>
            <security-role-ref>
                <role-name>power-user</role-name>
            </security-role-ref>
            <security-role-ref>
                <role-name>user</role-name>
            </security-role-ref>
        </portlet>

我也有一个这样的 ManagedBean(用于业务逻辑):

@ManagedBean(name="backingBean")
@SessionScoped
public class BackingBeanImpl extends GenericPortlet{ 

          .... 

    @Override
protected void doView(RenderRequest request, RenderResponse response)
        throws PortletException, IOException {
    // TODO Auto-generated method stub
    System.out.println("I'M HERE");
    super.doView(request, response);
}

}

问题是当portlet 启动时doView() 方法没有被调用。也许这是一个桥梁问题。我不知道。

我希望有一个人可以帮助我。

谢谢

4

1 回答 1

0

根据您列出的 portlet.xml,您的 portlet 实现是org.portletfaces.bridge.GenericFacesPortlet. 仅仅因为您的支持 bean 实现了 GenericPortlet 并不能使其成为 portlet 的实现。doView 在引用的 portlet 中实现,而不是在您的类中实现。

如果要覆盖GenericPortlet方法,则不应使用 JSF。推论:如果您使用 JSF,请使用 JSF 样式控制器来访问您的业务逻辑。

顺便说一句:您不应该将业务逻辑放入 portlet,而是让 portlet 访问您的业务逻辑。不要让您的业务逻辑引用 portlet api:这将限制您的业务逻辑仅在该环境中运行。

于 2014-03-07T10:04:54.287 回答