开始liferay

Gau*_*avP 2 liferay

我在liferay上工作.我们在项目中使用一个模块来创建liferay主题.我使用命令ant - Ddeploy.war=true它在服务器中部署它.war文件在liferay deploy文件夹中创建.但是当我启动服务器时,我没有获得任何登录选项.我没有任何特定的选项.我得到以下服务器日志

An error occurred at line: 117 in the jsp file: /html/portlet/login/login.jsp
com.alepo.hooks.ConcurrentLoginException cannot be resolved to a type
114:            <liferay-ui:error exception="<%= UserLockoutException.class %>" message="this-account-has-been-locked" />
115:            <liferay-ui:error exception="<%= UserPasswordException.class %>" message="please-enter-a-valid-password" />
116:            <liferay-ui:error exception="<%= UserScreenNameException.class %>" message="please-enter-a-valid-screen-name" />
117:            <liferay-ui:error exception="<%= com.alepo.hooks.ConcurrentLoginException.class %>" message="max-sessions-exceeded" />
118:
119:            <fieldset class="block-labels">
120:                    <div class="ctrl-holder">


Stacktrace:
        at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:93)
        at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
        at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:451)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:328)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:307)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
        at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:565)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:497)
        at com.liferay.taglib.util.IncludeTag.doEndTag(IncludeTag.java:67)
        at org.apache.jsp.html.common.themes.portlet_jsp._jspService(portlet_jsp.java:2669)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
Run Code Online (Sandbox Code Playgroud)

关于它的任何想法?

Pra*_*h K 6

看来你的自定义登录挂钩搞砸了,这不是主题的问题.

如果您仔细阅读错误:

在jsp文件中的行:117处发生错误:/html/portlet/login/login.jsp com.alepo.hooks.ConcurrentLoginException无法解析为类型

所以发生的事情是/html/portlet/login/login.jsp无法找到ConcurrentLoginException可能存在于钩子中的类,为什么会发生这种情况是因为liferay处理类加载的方式.

简而言之,有3个类加载器:

  1. global(服务器lib中的类,tomcat/ext/lib如数据库驱动程序和portal-service.jar):这些类可以被所有插件上下文和liferay的上下文使用并可用.
  2. Portal类加载器(ROOT/WEB-INF/lib类似于着名的portal-impl.jar类):这些类或实现仅适用于Liferay的上下文.
  3. Portlet/Plugin ClassLoader(加载我们的插件的类):这些可用于我们的插件(portlet,钩子等),并且不可用于liferay的模块/上下文.

所以在这个短暂的崩溃过程之后你可能已经知道问题是什么,但我仍然会尝试回答这个问题(为了点数:-).

所以就是这样,因为JSP-hook修改了liferay的JSP并被复制到了ROOT它下载到liferay的上下文中的目录,所以在插件中创建的任何自定义类(portlet或者钩子或主题)都不可用于JSP,所以在这种情况login.jsp.

因此要么不在JSP中使用该类;-),要么将您的异常类(打包在jar中)放在全局路径中tomcat/ext/lib,即使它可用于login.jsp.

以下是Liferay员工对类似问题的判决,以及另一个可能有助于将概念推向家庭并在未来提供帮助的答案.