1

Adobe CQ 5.6 にデプロイされた JSP 内から EL 関数にアクセスするためのガイダンスを提供できる人はいますか?

私の JSP はパッケージに入っていますが、EL 関数 (Java クラスの静的メソッド) と関連する TLD は別の OSGi バンドルにあります。どちらも Adob​​e CQ にインストールされます。バンドルの POM は、関連する Java パッケージをエクスポートします。

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    <configuration>
        <instructions>
            <Bundle-Name>AIB UI Bundle</Bundle-Name>
            <Export-Package>
                mypackage.*
            </Export-Package>
            <Include-Resource>
                {maven-resources}
            </Include-Resource>
            <Embed-Dependency>joda-convert;scope=compile|runtime,joda-time;scope=compile|runtime,</Embed-Dependency>
            <Bundle-Resource>/META-INF/tags</Bundle-Resource>
            <Sling-Bundle-Resource>/META-INF/tags</Sling-Bundle-Resource>
        </instructions>
    </configuration>
</plugin>

ただし、JSP が処理されると、EL 関数の呼び出しは失敗します。

エラーの内容: ファイル "/apps/aib/mortgage/components/page/main/utilityFunction" が見つかりません


私のコードは以下です。すべての助けを感謝して受け取りました。

よろしく、ケン。

OSGi バンドルにある EL 関数クラスsrc/main/java/mypackage/UtilityFunction.java:

package mypackage;

public class UtilityFunction {

private UtilityFunction() {
...
}

   public static String displayBuildNumber() {
   // Do processing
   }
}


同じ OSGi バンドルにある TLD、src/main/resources/META-INF/utilityExpressionLanguageFunctions.tld

<?xml version="1.0" encodeing="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<uri>utilityFunction</uri>
<function>
<name>displayBuildNumber</name>
<function-class>mypackage.UtilityFunction</function-class>
<function-signature>String displayBuildNumber()</function-signature>
</function>
</taglib>


JSP、次の場所にあり/apps/myproj/components/page/main/head.jspます:

<%@include file="/libs/foundation/global.jsp"%><%
%><%@page session="false" %>
<%@taglib prefix="cq" uri="http://www.day.com/taglibs/cq/1.0" %>
<%@taglib prefix="utils" uri="utilityFunction" %>

<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta http-equiv="keywords" content="<%=properties.get("p_metaKeywords","") %>" />
<meta name="description" content="<%=properties.get("p_metaDescription","") %>" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />

<title>My Application ${utils:displayBuildNumber()}</title>
<cq:include script="/libs/wcm/core/components/init/init.jsp"/>
<cq:include script="/libs/wcm/core/browsermap/browsermap.jsp" />
<cq:includeClientLib css="jquery-ui" />
<cq:includeClientLib js="cq.jquery, cq.foundation-main, cq.shared, forms-overlay, jquery-ui,cq.jquery.ui" />
</head>

<cq:defineObjects />
4

1 に答える 1

1

uri 値の完全なアドレスが必要です。次の完全に機能する例を考えてみましょう。

// pom.xml 内

<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
    <configuration>
        <instructions>
            <Export-Package>
            //Packages.....
            </Export-Package>
            <Import-Package>
            *;resolution:=optional
            </Import-Package>
            <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
            <Sling-Test-Regexp>.*Test</Sling-Test-Regexp>
            <Include-Resource>
                META-INF/my-tags.tld=target/classes/META-INF/my-tags.tld
            </Include-Resource>
        </instructions>
    </configuration>
</plugin>

//tld ファイル内

<description>My Test Taglib</description>
<tlib-version>1.0</tlib-version>
<short-name>cq-common</short-name>
<uri>http://taglib.cq.mycompany.se/taglibs/my-tags/1.0</uri>

<function>
    <name>doSomeThing</name>
    <function-class>com.my.company.SomeUtils</function-class>
    <function-signature>String doSomeThing(java.lang.String)</function-signature>
</function>

//jsp ファイル内

<%@taglib prefix="mytags" uri="http://taglib.cq.mycompany.se/taglibs/my-tags/1.0"%>
${mytags:doSomeThing(stringValueOfSomething)}

次の 2 つの場所にある完全修飾アドレスを持つ uri 値に注意してください。 tld ファイル内:

<uri>http://taglib.cq.mycompany.se/taglibs/my-tags/1.0</uri>

そしてjspファイルで:

<%@taglib prefix="mytags" uri="http://taglib.cq.mycompany.se/taglibs/my-tags/1.0"%>

問題が解決することを願っています

于 2014-02-24T07:30:45.943 に答える