【发布时间】:2016-09-27 22:10:15
【问题描述】:
所以,我试图弄清楚如何使用 JSTL 和 TLD 与 JSP 中的 Java 函数进行交互。这个特定的函数没有返回值,所以我假设我需要在 JSP 中直接使用 EL 调用来调用它:
<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
}
如您所见,没有回报。该函数只接受其输入参数,并使用这些参数在 Adobe CQ/AEM 环境中使用 JCR/Oak 节点结构构建子页面结构。因此,我尝试像这样设置 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 函数?它只是在页面加载时做一些事情。
【问题讨论】: