2

私はliferayに取り組んでいます.liferayテーマを作成するために、プロジェクトで1つのモジュールを使用しています. コマンド ant を使用Ddeploy.war=trueします。これにより、サーバーにデプロイされます。war ファイルは liferay deploy フォルダーに作成されます。しかし、サーバーを起動すると、ログインのオプションが表示されません。liferay 固有のオプションがありません。次のサーバーログを取得します

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)

それについてのアイデアはありますか?

4

2 に答える 2

6

カスタムログインフックが台無しになっているようで、テーマの問題ではありません。

エラーを注意深く読んだ場合:

次の行でエラーが発生しました: jsp ファイルの 117: /html/portlet/login/login.jsp com.alepo.hooks.ConcurrentLoginException を型に解決できません

何が起こっているのかというと、おそらくあなたのフックに存在/html/portlet/login/login.jspするクラスを見つけることができないということConcurrentLoginExceptionです。なぜこれが起こっているのかというと、liferay がクラスローディングを処理する方法が原因です。

つまり、3 つのクラスローダーがあります。

  1. グローバルtomcat/ext/lib(データベース ドライバや などのサーバー lib 内のクラスportal-service.jar): これらのクラスは、すべてのプラグイン コンテキストと liferay のコンテキストで使用でき、利用できます。
  2. ポータル クラスローダー(ROOT/WEB-INF/lib有名な のようなportal-impl.jarクラス): これらのクラスまたは実装は、Liferay のコンテキストでのみ使用できます。
  3. Portlet / Plugin ClassLoader (プラグインのクラスをロードします): これらはプラグイン (ポートレット、フックなど) で使用できますが、liferay のモジュール/コンテキストでは使用できません。

したがって、この短いクラッシュ コースの後、問題が何であるかを既に知っているかもしれませんが、それでも私はこれに答えようとします (ポイントのために :-)。

ここでは、JSP フックが liferay の JSP を変更し、ROOTディレクトリにコピーされるため、liferay のコンテキストに分類されるため、プラグイン (ポートレット、フック、またはテーマ) 内で作成されたカスタム クラスは JSP で使用できません。この場合はlogin.jsp

したがって、そのクラスを JSP 内で使用しないでください ;-) 例外クラス (jar にパッケージ化されている) をグローバル パスtomcat/ext/libに配置して、login.jsp.

同様の問題に関するLiferayスタッフからの評決と、コンセプトを家に持ち帰り、将来的に役立つ可能性のある別の回答を次に示します.

于 2013-04-06T05:27:54.593 に答える