6

我正在为 Liferay 部署最基本的 Portlet:

public class FirstPortlet extends GenericPortlet
{
    @RenderMode(name="VIEW")
    public void welcomeWelcome(RenderRequest request, 
            RenderResponse response) throws  
            PortletException, IOException
    {       
        PrintWriter out = response.getWriter();
        out.println ("This is a portlet, <em>within a Portal</em>");
    }
}

在部署时,我得到一个 ClassCastException:

 Caused by: java.lang.ClassCastException: FirstPortlet cannot be cast to javax.po
rtlet.Portlet

在谷歌搜索之后,部署 portlet.jar 似乎是一个错误——我确定我不会意外地这样做。

javax.portlet.Portlet 由 GenericPortlet 实现,所有 Portlet 示例似乎都扩展了 GenericPortlet,所以我认为没关系。

任何人都可以帮忙吗?

4

2 回答 2

8

javax.portlet.Portlet 由 GenericPortlet 实现,所有 Portlet 示例似乎都扩展了 GenericPortlet,所以我认为没关系。

如果GenericPortletimplements Portlet,我猜你有一个类加载器问题。该类在两个不同的类加载器中加载了两次,因此被认为是不同的。

在谷歌搜索之后,部署 portlet.jar 似乎是一个错误——我确定我不会意外地这样做。

我仍然建议您仔细检查您是否没有portlet.jar(或另一个包含 jar 的 jar Portlet)在某处加载了两次。可能的位置取决于您使用的容器(Tomcat?Glassfish?)。

于 2010-03-02T20:31:25.387 回答
7

这绝对是类加载问题。如果您确定您的 WAR 存档中没有 portlet.jar,您可以打开详细类加载并查看 javax.portlet.Portlet 从哪里加载。

为了让你详细的类加载将以下参数传递给 JVM:

-详细:类

于 2010-03-02T22:53:28.660 回答