AEM的基础组件只是简单的JSP,在任何java bean中都没有太多逻辑。我现在尝试将表单组件java逻辑转换为Sling Models。但是再次启动组件并不容易,因为有两件事要做(从/libs/foundation/components/form/start/start.jsp
复制)。
第一:
FormsHelper.startForm(slingRequest, new JspSlingHttpServletResponseWrapper(pageContext));
第二
componentContext.setDecorate(true);
slingRequest
很简单,当我从中调整模型时,我可以从哪里获取pageContext
?我还需要它来获取可以通过componentContext
检索的pageContext
。
我在通过SlingHttpServletRequest
进行调整时尝试了以下内容:
@SlingObject
private PageContext pc;
但这不起作用。
修改
我想出了如何在没有pageContext的情况下创建表单启动组件。虽然与表单一起开头,但是表单结尾有一个部分直接使用pageContext(从/libs/foundation/components/form/end/end.jsp
复制)
final boolean isSubmittable = FormsHelper.checkRule(resource, slingRequest, pageContext, "submittableRule");
if (isSubmittable || isEditMode) {
不确定这个布尔值是什么,或者更确切地说在渲染按钮之前检查它的原因。
所以要么我需要一种方法来注入pageContext
,要么我需要另一种方法来使用Sling Models构建这个表单组件。
答案 0 :(得分:1)
您不一定需要遵循相同的方法,如果您查看javadocs,则可以使用startForm(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException, ServletException