【发布时间】:2016-12-08 12:32:35
【问题描述】:
AEM 的基础组件只是普通的 JSP,在任何 Java bean 中都没有太多逻辑。我现在尝试将表单组件 java 逻辑转换为 Sling 模型。但是再次启动组件并不容易,因为有两件事要做(复制自/libs/foundation/components/form/start/start.jsp)。
第一:
FormsHelper.startForm(slingRequest, new JspSlingHttpServletResponseWrapper(pageContext));
第二:
componentContext.setDecorate(true);
slingRequest 很容易,当我从中调整我的模型时,我从哪里获得pageContext?我还需要它来获取可以通过pageContext 检索的componentContext。
我在通过SlingHttpServletRequest适应时尝试了以下方法:
@SlingObject
private PageContext pc;
但这不起作用。
编辑:
我想出了如何在没有 pageContext 的情况下创建表单启动组件。虽然和form start一起,有form end,还有一部分直接使用pageContext(抄自/libs/foundation/components/form/end/end.jsp)
final boolean isSubmittable = FormsHelper.checkRule(resource, slingRequest, pageContext, "submittableRule");
if (isSubmittable || isEditMode) {
不知道这个布尔值是干什么用的,或者不知道为什么在渲染按钮之前检查它。
所以要么我需要一种方法来注入 pageContext,要么我需要另一种方法来使用 Sling Models 构建这个表单组件。
【问题讨论】:
-
我认为这不可能。(以您尝试的方式注入 pagecontext) - pageContext 不能在没有 jsp 的情况下创建。不过,我对此不是 100% 确定的。
-
@awadheshv 在 SlingModels 可用之前,我使用自己的 Annotaions 尝试进行了此操作。虽然它只适用于自定义标签,但 sling:adaptTo 标签是自定义标签,因此他们可以将其注入那里。但他们可能不会,因为它是由 Adobe 驱动的,并且他们想推广 PageContext 不可用的 Sightly 模板引擎(无 JSP)。
标签: aem sling-models