【问题标题】:SlingModels: How to build the form component from foundation (inject PageContext?)SlingModels:如何从基础构建表单组件(注入 PageContext?)
【发布时间】: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 标签是自定义标签,因此他们可以将其注入那里。但他们可能不会,因为它是由 Adob​​e 驱动的,并且他们想推广 PageContext 不可用的 Sightly 模板引擎(无 JSP)。

标签: aem sling-models


【解决方案1】:

您不一定需要遵循相同的方法,如果您查看javadocs,您可以使用startForm(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException, ServletException

【讨论】:

  • 谢谢,经过几次尝试和错误,我也明白了这一点。我认为我需要包装器,否则响应将尽早提交。我还发现,您可以通过 WCMUtils 获取 componentContext。虽然我需要更改问题,因为表单结束组件还有一个 pageContext 引用,但我现在无法摆脱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-15
  • 2019-07-23
  • 2011-01-05
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多