我正在为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,所以我认为没问题。
有人可以帮忙吗?
答案 0 :(得分:8)
实现了javax.portlet.Portlet 通过GenericPortlet和所有Portlet 示例似乎扩展了GenericPortlet 所以我认为没问题。
如果GenericPortlet
实现Portlet
,我的猜测是你有类加载器问题。该类在两个不同的类加载器中加载两次,因此被认为是不同的。
谷歌搜索后,似乎 部署portlet.jar是一个错误 - 我确定我不是偶然的 这样做。
我仍然建议你仔细检查你是否有portlet.jar
(或另一个包含Portlet
的jar)在某处加载了两次。可能的位置取决于您使用的容器(Tomcat?Glassfish?)。
答案 1 :(得分:7)
这绝对是类加载问题。如果你确定,你的WAR档案中没有portlet.jar,你可以打开详细的类加载并观察从哪里加载javax.portlet.Portlet。
要将详细的类加载传递给JVM:
-verbose:类