所以,我试图弄清楚如何使用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函数?它只是在页面加载时做了一些事情。
答案 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>