开始liferay

时间:2013-04-05 09:56:46

标签: 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)

关于它的任何想法?

2 个答案:

答案 0 :(得分:6)

似乎你的自定义登录挂钩搞砸了,这不是主题的问题。

如果您仔细阅读错误:

  

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

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

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

  1. 全局(服务器库中的类,如tomcat/ext/lib,如数据库驱动程序和portal-service.jar):这些类可供所有插件上下文使用,并且可用于所有插件上下文和liferay的背景。
  2. Portal类加载器ROOT/WEB-INF/lib中的类与着名的portal-impl.jar类似):这些类或实现仅适用于Liferay的上下文。
  3. Portlet / Plugin ClassLoader (加载我们插件的类):这些可用于我们的插件(portlet,钩子等),并且不适用于liferay的模块/上下文。
  4. 所以在这个短暂的崩溃过程之后你可能已经知道问题是什么,但我仍然会尝试回答这个问题(为了点数: - )。

    所以在这里,因为JSP-hook修改了liferay的JSP并被复制到ROOT目录,它属于liferay的上下文,所以在插件(portlet或hook或themes)中创建的任何自定义类都不会可用于JSP,因此在本例中为login.jsp

    所以不要在JSP中使用那个类;-)或者将你的异常类(打包在jar中)放在全局路径即tomcat/ext/lib中,以便它可用于login.jsp

    以下是类似问题的verdict from Liferay Staff和另一个answer,它可能有助于将概念推向家庭并在将来提供帮助。

答案 1 :(得分:-1)

您似乎尚未在ConcurrentLoginException

中导入/html/portlet/login/login.jsp课程

假设ConcurrentLoginException类在您的项目中,请将该类导入login.jsp,方法是将以下行放在login.jsp的顶部:

<%@page import="com.alepo.hooks.ConcurrentLoginException"%>

如果您的项目中没有ConcurrentLoginException类,那么使用Prakash的方法,这是如何映射依赖项的绝佳答案。