我在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()方法。也许这是一个桥梁问题。我不知道。
我希望有人可以帮助我。
谢谢
答案 0 :(得分:0)
您的portlet实现 - 根据您列出的portlet.xml - 是org.portletfaces.bridge.GenericFacesPortlet
。仅仅因为你的支持bean实现了GenericPortlet并没有使它成为portlet的实现。 doView在引用的portlet中实现,而不是在你的类中实现。
如果要覆盖GenericPortlet
方法,则不应使用JSF。推论:如果您使用JSF,请使用JSF样式控制器来访问您的业务逻辑。
顺便说一句:您不应该将业务逻辑放入portlet,而应该让portlet访问您的业务逻辑。没有业务逻辑引用portlet api:这会限制业务逻辑仅在该环境中运行。