Liferay Portlet错误 - "NoSuchResourceActionException <Portlet> _WAR_ <PortletApp> #VIEW"

gra*_*hey 5 grails portal portlet liferay liferay-6

我使用Grails 2.0.4,Portlets Plugin 0.9.2Liferay Portlets Plugin 0.4创建了一个自定义的Liferay 6.2 portlet .

部署portlet后,我收到一个奇怪的错误.这是发生的事情:

  1. 通过Web界面上载WAR文件
  2. 将portlet添加到页面
  3. 收到错误消息"出现意外错误.请刷新当前页面."
  4. 刷新页面以发现页面上没有任何portlet工作,并显示以下错误:"内部服务器错误 - 访问请求的资源时发生错误." (见下图)

日志表明以下错误:

com.liferay.portal.NoSuchResourceActionException: <Portlet>_WAR_<PortletApp>#VIEW
Run Code Online (Sandbox Code Playgroud)

我见过其他情况,其中"#VIEW"表示"#ADD_TO_PAGE".请注意,portlet正在部署并在我用于开发的Liferay 6.2的香草版本上正常工作.

有谁知道这个问题可能是什么?谢谢.

堆栈跟踪:

Jan 16, 2014 10:42:40 AM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
com.liferay.portal.NoSuchResourceActionException: <Portlet>_WAR_<PortletApp>#VIEW
    at com.liferay.portal.service.impl.ResourceActionLocalServiceImpl.getResourceAction(ResourceActionLocalServiceImpl.java:196)
    at sun.reflect.GeneratedMethodAccessor308.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:115)
    at com.liferay.portal.spring.aop.ServiceBeanAopProxy.invoke(ServiceBeanAopProxy.java:175)
    at com.sun.proxy.$Proxy85.getResourceAction(Unknown Source)
    at com.liferay.portal.service.impl.ResourcePermissionLocalServiceImpl.doUpdateResourcePermission(ResourcePermissionLocalServiceImpl.java:1190)
    at com.liferay.portal.service.impl.ResourcePermissionLocalServiceImpl.updateResourcePermission(ResourcePermissionLocalServiceImpl.java:1312)
    at com.liferay.portal.service.impl.ResourcePermissionLocalServiceImpl.setOwnerResourcePermissions(ResourcePermissionLocalServiceImpl.java:1038)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:115)
    at com.liferay.portal.spring.transaction.DefaultTransactionExecutor.execute(DefaultTransactionExecutor.java:62)
    at com.liferay.portal.spring.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:51)
    at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:111)
    at com.liferay.portal.spring.aop.ServiceBeanAopProxy.invoke(ServiceBeanAopProxy.java:175)
Run Code Online (Sandbox Code Playgroud)

添加portlet并刷新页面后的错误

gra*_*hey 4

问题最终出现在堆栈跟踪的更高位置。我收到以下错误:

net.sf.ehcache.CacheException: Unable to load class net.sf.ehcache.store.DefaultElementValueComparator
Run Code Online (Sandbox Code Playgroud)

我能够通过阅读此链接解决该问题。以下是我采取的步骤:

  1. 导航$liferay_home/tomcat/webapps/ROOT/WEB-INF/lib/
  2. 将 ehcache.jar 复制到某处进行备份(例如根$liferay_home目录)
  3. 再次将 ehcache.jar 复制到某个地方以使用它(例如桌面)
  4. 将名称 ehcache.jar 更改为 ehcache.zip
  5. 解压 ehcache.zip 文件
  6. 将更新的ClassLoaderUtil.class文件复制到文件夹的net/sf/ehcache/util/目录中,替换当前ClassLoaderUtil.class文件。
  7. 压缩 ehcache 目录
  8. 将名称 ehcache.zip 更改为 ehcache.jar
  9. 将这个新的 ehcache.jar 文件放入 中$liferay_home/tomcat/webapps/ROOT/WEB-INF/lib/,替换当前的 ehcache.jar