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