Liferay / Icefaces portlet不允许在doView方法中访问

时间:2014-03-07 09:28:25

标签: liferay portlet icefaces managed-bean portletbridge

我在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()方法。也许这是一个桥梁问题。我不知道。

我希望有人可以帮助我。

谢谢

1 个答案:

答案 0 :(得分:0)

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

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

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