将简单的Portlet部署到Liferay - ClassCastException

Dic*_*ood 6 portlet liferay

我正在为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>");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

 Caused by: java.lang.ClassCastException: FirstPortlet cannot be cast to javax.po
rtlet.Portlet
Run Code Online (Sandbox Code Playgroud)

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

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

有人可以帮忙吗?

ewe*_*nli 8

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

如果GenericPortlet实现Portlet,我的猜测是你有一个类加载器问题.该类在两个不同的类加载器中加载两次,因此被认为是不同的.

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

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


Jar*_*ala 7

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

要将详细的类加载传递给JVM,请将以下参数传递给:

-verbose:类