TLD中没有退货的Java功能

时间:2016-09-27 22:10:16

标签: java jsp jstl uri aem

所以,我试图弄清楚如何使用JSTL和TLD与JSP中的Java函数进行交互。这个特殊的函数没有返回,所以我假设我需要通过EL调用直接在JSP中调用它:

<html code here>
${prefix:createChildPage(currentPage, resourceResolver, strings, string)}
<other jstl code here>
<more html here>

但我无法弄清楚如何正确设置TLD。 Java函数如下所示:

public static void createChildPage(Page page, ResourceResolver resourceResolver, String[] strings, String string) throws Exception {
    // code in here
}

如你所见,没有回报。该函数只使用其输入参数,并使用这些参数在使用JCR / Oak节点结构的Adobe CQ / AEM环境中构建子页面结构。所以,我尝试像这样设置TLD功能,并且它一直在告诉我这个方法在我的班级中不存在。

<function>
    <name>createChildPage</name>
    <function-class>com.org.utils.ClassName</function-class>
    <function-signature>createChildPage(com.day.cq.wcm.api.Page, org.apache.sling.api.resource.ResourceResolver, java.lang.String, java.lang.String)</function-signature>
</function>

起初,我在想我可能只是不知道如何为TLD分类String []。但是我尝试了很多具有相同结果的类,我相当肯定它可能与我没有指定返回的事实有关。对于上面的示例代码,我将String []归类为java.lang.String,但也许它应该是java.util.Array。我把头撞到了墙上,此时无法说清楚。而且我假设我需要TLD函数,因为我必须有一些从JSP调用的方法(因此,代码的${prefix:部分。

所以我的问题是:如何使用没有返回的JSTL / EL从JSP调用Java函数?它只是在页面加载时做了一些事情。

3 个答案:

答案 0 :(得分:0)

您是否考虑过只返回被忽略的值? 如:

public static int createChildPage(Page page, ResourceResolver resourceResolver, String[] strings, String string) throws Exception {
    // code in here
    return 0;
}

答案 1 :(得分:0)

我最终从另一个函数调用该函数,该函数返回创建页面的路径。

public static String getArticleIncludePath(Page givenPage, String pageName, ResourceResolver resourceResolver) throws Exception {
    // Call createChildPage to build out child page as needed
    createChildPage(givenPage, resourceResolver, pageName);
    // Now get the child includePath
    String childPath = givenPage.getPath() + pageName;
    return childPath;
}

答案 2 :(得分:0)

有点晚了,但您是否尝试将 void 添加到 function-signature ?这样做对我有用。

<function>
   <name>createChildPage</name>
   <function-class>com.org.utils.ClassName</function-class>
   <function-signature>void createChildPage(com.day.cq.wcm.api.Page, org.apache.sling.api.resource.ResourceResolver, java.lang.String, java.lang.String)</function-signature>
</function>