Aem 为什么我们有多个jsp';CQ5中的单个组件是什么?

Aem 为什么我们有多个jsp';CQ5中的单个组件是什么?,aem,sling,Aem,Sling,我是CQ5的新手。在学习其概念时,我了解到CQ5使用Sling框架进行请求处理,并基于最佳匹配解析脚本。我在CQ5中见过几个组件(大多数是页面或顶级组件),它们在单个组件下有多个jsp(例如页面组件有page.jsp、body.jsp、header.jsp,类似重定向组件有redirect.jsp、body.jsp、content.jsp)。所以我想问,在什么情况下,我们将有多个jsp,哪个脚本将由sling解析以显示内容?通常,一个组件由一个与请求匹配的脚本呈现,我们称之为GET.jsp 但是

我是CQ5的新手。在学习其概念时,我了解到CQ5使用Sling框架进行请求处理,并基于最佳匹配解析脚本。我在CQ5中见过几个组件(大多数是页面或顶级组件),它们在单个组件下有多个jsp(例如页面组件有page.jsp、body.jsp、header.jsp,类似重定向组件有redirect.jsp、body.jsp、content.jsp)。所以我想问,在什么情况下,我们将有多个jsp,哪个脚本将由sling解析以显示内容?

通常,一个组件由一个与请求匹配的脚本呈现,我们称之为
GET.jsp


但是,在该脚本中,您只能找到对其他脚本的include调用,如body.jsp、header.jsp。这样做的目的是,您可以在
/apps
中覆盖另一个header.jsp(例如),而无需覆盖完整的GET.jsp脚本。

一个组件下有多个jsp的可能性与sling的关系比与CQ的关系更大(尽管CQ还提供了框架上的一些扩展)。在顶级组件(例如页面组件)中使用更多jsp的原因通常是为了捕捉发生在较低级别某处的包含情况(因此包含文件的定义在那里,但实际文件不在组件中)

在我看来,在一个组件下有多个jsp有三个主要原因(无论是什么级别),所有这些原因都可以同时应用于同一个组件

  • 将组件分解为更小(更易于维护)的部分
  • 覆盖渲染
  • 使用吊索选择器的功能
  • 场景1:将组件拆分为更小(更易于维护)的部分

    正如本文标题所述,我们可以在一个组件中使用多个jsp,将该组件的呈现拆分为单独的部分,这些部分更易于维护和覆盖,或者两者兼而有之。“两种”情况是基础页组件中发生的情况。但请查看场景2以了解详细信息

    标准页面的呈现从具有模板的cq页面开始,该模板依次指定用于呈现的组件。因此跳过模板部分,直接进入实际的基础页组件。在page.jsp中呈现页面开始。在本文中,它通过包含“head.jsp”和“body.jsp”进一步分解。他们反过来又把它进一步分开。这允许您覆盖子组件中页面组件的特定部分(请参见场景2)

    场景2:覆盖渲染

    <>你说你自己创建了一个从基础页面组件继承的基本页面组件(公共实践)(通过SLR:RealuxUpPyType属性),并且你只对在体内吐出一个特定的HTML结构感兴趣。在本例中,您只需在“基本页面”组件内创建一个body.jsp文件(无其他内容)。这实际上覆盖了主体的绘制(在基础页组件中),但对于所有其他的默认值(例如头、头文件等),在父链中的某个文件中的可用性。在本例中,它将默认在基础页组件中指定的文件上。该链将解析为基础组件,然后将其转换为基础页组件(因为您只有By.jsp,而没有Base.jsp)。在基础页组件中,找到了包含Bydi.jSP(将是Boy.jp定义在基本组件中)的Paj.jSP。

    我们在这里所做的工作在各个层面都起作用。当从“页面”组件以外的其他组件继承时,此概念也会起作用。例如,我使用它来重写基础列表组件的渲染,其中包含了JSP(SLI.jsp),而JSP(SLI.jsp)则使用带有特定选择器的吊带,而不是从该列表组件继承组件,并将SLIN包含选择器覆盖到其他东西。 场景3:使用吊索选择器的功能

    由于sling具有“选择器”的概念,sling将沿着sling链找到正确的组件来呈现内容。Sling将始终使用最特定的选择器进行渲染

    例如,我创建了一个继承了基金会标题组件的标题组件。假设我在title组件中有这个结构

    title.jsp
    h2.jsp
    fancy.jsp
    
    显然,h2和fancy是标题组件的实际选择器

    将多个jsp is与选择器结合使用是一种常用做法。它们用于以不同的方式显示基本相同的组件

    您还可以将h2.jsp放在页面组件中。如果正确设置链条,吊索会找到它


    选择器比我在这里描述的要多得多。但这只是问题的一部分。

    你想要长版本还是短版本?@3xil3:-一个详细的版本。。!添加到场景3。。。脚本解析总结在中(请参见步骤5)。中也对其进行了描述,请查看Bertrand Delacretaz引用的详细示例。