我正在尝试为AEM相关页面找出解决方案。我需要根据页面jsps中包含的jsp的逻辑更改基页中body标签的类。我需要这个,所以我可以不同的方式设置通用小部件来处理不同高度的固定标头。
所以我无法真正提供代码示例,因为我们正在讨论内容编写者可以添加到页面的jsps,控制器和可编辑内容小部件。所以很难,因为我不知道如何继续这一点。
让我试着解释一下我们在这里有什么。我们有一个jsp基页,它有html标签集,head标签设置我们使用的所有元数据,css和js库,以及body标签集。基页还将包含包含的jsps,这些jsps表示站点中使用的站点范围页眉和页脚。我们还有可选的子导航,可以添加到站点子部分的页面,并根据使用的页面模板类型激活。所以这意味着通用标题加上子导航。
然后每个页面jsp扩展上述基页。这些页面jsps充当我们的CMS使用的不同页面模板。内容作者可以将内容和html小部件拖到页面上。
我们还有页面模板,其中包含自己的第三级子导航,可以单独使用通用标头,也可以使用通用标头和子导航。
我们还有一个新的场景,可以有一个可以进入的第四级导航。此导航将是cms中的可拖动小部件。
所以我想要做的是基于页面模板并根据子导航的组合,根据页面是否是单独的通用标题,或者对于任何一个的不同类,对body标签进行不同的分类。某人导航组合。这是必要的,因为内容作者将小部件拖到页面或开发内容我可以抵消内容或更改滚动偏移以绕过不同的固定标题/导航解决方案
答案 0 :(得分:0)
这听起来像客户端代码的好例子。一种选择是使用在DOM内容加载事件上运行的JavaScript代码(如果使用jQuery,则为“ready”事件)来更改body标记的CSS类。你可以做到这一点,因此每个组件都有一个特定的,独特的类。然后,JavaScript函数可以检查页面并查找所有唯一组件,然后根据它找到的内容以及您在该JavaScript函数中编写的逻辑将正确的类分配给body标记。
JSP将在服务器上从上到下进行处理,因此一旦处理了包含body标记的JSP,您将无法在之后处理的某个后续JSP中更改处理到响应的内容。
另见
您可以调用标记来写出正文HTML标记,在该标记的Java代码中,您可以检查页面节点并查看其他组件已包含在内,然后相应地写出正文标记HTML。你想在服务器上这样做。但关键是你必须在写入body标签之前这样做。处理完JSP并将body标记写入响应后,在后续JSP中更改它为时已晚。
例如,在您的JSP中,您可以执行以下操作:
<myCustomTags:bodyOpeningTagBuilder />
<html>
<head>
</head>
<c:out value="${bodyOpeningTagFromBuilder}" />
...other JSPs
</body>
</html>