【问题标题】:how to change the class of the body tag in a jsp base page from a included jsp如何从包含的jsp更改jsp基本页面中body标签的类
【发布时间】:2018-06-14 19:13:50
【问题描述】:

我正在尝试为我们的 AEM 相关页面找出解决方案。我需要根据页面jsps中包含的jsp的逻辑来更改我们的基本页面中body标签的类。我需要这个,所以我可以不同地设置通用小部件以处理不同高度的固定标题。

所以我不能真正提供代码示例,因为我们正在讨论 jsps、控制器和内容编写者可以添加到页面的可编辑内容小部件。所以这很难,因为我不知道如何进行。

所以让我试着解释一下我们这里有什么。我们有一个 jsp 基本页面,其中包含 html 标签集、head 标签集所有元数据、我们使用的 css 和 js 库以及 body 标签集。基本页面还将包含代表整个站点使用的站点范围的页眉和页脚的包含 jsps。我们还将有可选的子导航,可以将其添加到站点子部分的页面中,并根据使用的页面模板类型激活。所以这意味着一个通用标题加上一个子导航。

然后每个页面jsp扩展上述基本页面。这些页面 jsps 充当我们的 CMS 使用的不同页面模板。内容作者可以将内容和 html 小部件拖到页面上。

我们也有包含自己的第三级子导航的页面模板,可以单独使用通用标题或通用标题和子导航。

我们还有一个新场景,其中可能会有一个 4 级导航可以发挥作用。此导航将是 cms 中的可拖动小部件。

所以我想要做的是基于页面模板并基于正在播放的子导航组合,根据页面是单独的通用标题还是不同的类别对正文标签进行不同的分类某人导航组合。这是必需的,因为内容作者将小部件拖动到页面或开发内容我可以偏移内容或更改滚动偏移量以绕过不同的固定标题/导航解决方案

【问题讨论】:

  • 你能举个例子说明你的意思吗?
  • @JonathanLaliberte 我更新了最初的问题。我不能真正添加​​代码,因为我们正在讨论 JSP、控制器和 css 的多个级别。我希望新的描述有助于解释我想要做什么。

标签: html css jsp aem


【解决方案1】:

这听起来像是客户端代码的好案例。一种选择是使用在 DOM 内容加载事件(如果您使用 jQuery 时为“就绪”事件)上运行的 JavaScript 代码来更改 body 标记的 CSS 类。你可以让每个组件都有一个特定的、唯一的类。然后 JavaScript 函数可以检查页面并找到所有独特的组件,然后根据它找到的内容和您在该 JavaScript 函数中编写的逻辑将正确的类分配给 body 标签。

JSP 将在服务器上从上到下进行处理,因此一旦处理完包含 body 标记的 JSP,您将无法将处理的内容更改为随后处理的某些后续 JSP 中的响应。

另见

你可以调用一个标签来写出body HTML标签,在该标签的Java代码中你可以检查页面节点并查看包含了哪些其他组件,然后相应地写出body标签HTML,如果您想在服务器上执行此操作。但关键是你必须在写body标签之前做这件事。一旦 JSP 被处理并且 body 标记被写入响应,在后续的 JSP 中更改它就太晚了。

例如,在您的 JSP 中,您会执行以下操作:

<myCustomTags:bodyOpeningTagBuilder />
<html>
<head>
</head>
<c:out value="${bodyOpeningTagFromBuilder}" />

...other JSPs

</body>
</html>

【讨论】:

  • 我们目前正在这样做,但是在来自服务器的页面上呈现可能需要一些时间,而且该页面已经有大量的 js。所以最终结果是页面开始加载,您等待几秒钟以获取所有数据,js 和 css。然后 .ready 调用触发检查 div 是否在页面上,然后对正文进行分类。最终结果是几秒钟后的页面移位。因此看到的原因可以在服务器上完成。
  • 那么也许你可以调用一个标签来写出正文,在该标签的Java代码中你可以检查页面节点并查看哪些组件已被使用。我更新了我的答案。
猜你喜欢
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 2012-06-06
  • 2016-04-19
  • 1970-01-01
  • 2016-02-19
相关资源
最近更新 更多