我在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)
关于它的任何想法?
答案 0 :(得分:6)
似乎你的自定义登录挂钩搞砸了,这不是主题的问题。
如果您仔细阅读错误:
jsp文件中的行:117发生错误:/html/portlet/login/login.jsp com.alepo.hooks.ConcurrentLoginException无法解析为类型
所以发生的事情是/html/portlet/login/login.jsp
无法找到可能存在于您的钩子中的类ConcurrentLoginException
,为什么会发生这种情况是因为liferay处理类加载的方式。
简而言之,有3个类加载器:
tomcat/ext/lib
,如数据库驱动程序和portal-service.jar
):这些类可供所有插件上下文使用,并且可用于所有插件上下文和liferay的背景。ROOT/WEB-INF/lib
中的类与着名的portal-impl.jar
类似):这些类或实现仅适用于Liferay的上下文。所以在这个短暂的崩溃过程之后你可能已经知道问题是什么,但我仍然会尝试回答这个问题(为了点数: - )。
所以在这里,因为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的方法,这是如何映射依赖项的绝佳答案。