Liferay での展開に対応するように、Spring MVC サーブレット アプリケーションを移植しています。アプリケーションを Spring MVC ポートレットに変換しています。私のアプリケーションは、フロントエンドとして html + javascript を使用しています。相対 URL が機能していないため、index.html に .js または .css ファイルをインポートできません。この点で何か助けはありますか?
2 に答える
ファイル内の javascript ファイルと css ファイルの場所を指定すると、liferay-portlet.xml
自動的に追加されます。同じものを html/jsp ファイルに明示的に追加する必要はありません。
liferay-portlet.xml に、次の属性を正しいファイル パスとともに追加してください。
<header-portlet-css>/css/main.css</header-portlet-css>
<header-portlet-javascript>/js/main.js</header-portlet-javascript>
また、画像などの静的リソースにアクセスする場合は、次のようなパスを使用できます
<img src='<%=request.getContextPath()%>/images/gear.png' class='settings' />
構造はこのようになっています
-ポートレット ---docroot ------画像 --------gear.png
参照は Web アプリケーション コンテキスト参照に関連しています。これは通常、ポートレット インスタンスと他のいくつかの依存構造 (関連する LR テーマ) を含むポータル ROOT コンテキストであり、想定するポートレット (アプリケーション) コンテキストではありません。したがって、解決策は、パス定義の前にプレフィックスを付けたポータル インスタンス固有のグローバル変数を使用することです。これを実現するには、HTML ページのコンテンツをレンダリングする前に、このパスを構築する必要があります。これは通常、いくつかの Liferay ユーティリティ クラスを使用して実現されます。たとえば、次のような JSP の場合です。
<link href="<%= PortalUtil.getStaticResourceURL(request, request.getContextPath() + "/css.jsp", portlet.getTimestamp()) %>"
どうやら、JSP のようなサーバー側のスクリプトを使用していない場合 (BTW は良い考えではないと思います)、他の Java レイヤー機能を使用してこれを解決し、ブラウザーによってレンダリングされる前に HTML に書き込む必要があります。