如何在组件的jsp / html aem6.3中获取不带域名的浏览器页面URL?

时间:2018-09-07 10:19:59

标签: aem sightly

假设我的页面网址是www.test.com/myproject/en/test.html。现在,我需要在组件的jsp / html文件中获取“ /myproject/en/test.html”。我们正在使用。

我正在尝试使用下面的代码来实现它-

<script>
    var x = window.location.pathname;
alert(x);
</script>

我在变量/myproject/en/test.html中获得了值x,但是不能如下使用meta标签中的值-

<link rel="icon" href="https://mywebsite.com ${x}">

如何在meta标记中传递x的值?或者,还有其他方法可以实现吗?

2 个答案:

答案 0 :(得分:0)

<script> javascript是在浏览器上执行的客户端代码。 Sightly / jsp是服务器端代码,已经在服务器端进行了编译和呈现。您的收藏夹代码将是服务器端渲染。这是示例:

视域

<link rel="icon" href="https://mywebsite.com/${currentPage.path}">

缺点: 您的域被硬编码为mywebsite.com。所有环境; qa,uat,登台将显示错误的域。

更好的实现:使用外部化程序。

<sly data-sly-use.page="com.mywebsite.core.PageHelper"/>
<link rel="icon" href="${page.currentPageUrl}">

并创建一个吊索模型助手

@Model(adaptables = SlingHttpServletRequest.class)
public class PageHelper {

@OSGiService
private Externalizer externalizer;
@ScriptVariable
private Page currentPage;
@ScriptVariable
private ResourceResolver resolver;
String currentPageUrl;

@PostConstruct
protected void initModel() {
   currentPageUrl = externalizer.publishLink(resolver, currentPage.getPath()) + ".html";
}

public String getCurrentPageUrl() {
   return currentPageUrl;
}

奖金:wcm core具有内置的getFavIcons实现。它可以被利用。

答案 1 :(得分:0)

您可以直接使用Sightly提供的请求对象(由Java支持的对象)。

有关完整的URL:

${request.requestURL.toString}

对于当前页面路径:

${currentPage.path} // returns only the path without domain name

对于URL的特定部分:

${request.scheme} // returns https or http
${request.serverName} // returns server name eg: stackoverflow.com
${request.serverPort} // returns server port eg: 4502 for AEM
${request.requestURI} // returns URI eg: /content/test.html

连接特定部分以在Sighlty中创建所需的URL:

<sly data-sly-test.scheme="${request.scheme}"/>
<sly data-sly-test.servername="${request.serverName}"/>
<sly data-sly-test.serverport="${request.serverPort}"/>
<sly data-sly-test.uri="${request.requestURI}"/>

<link rel="icon" href="${scheme}://${servername}:${serverport}${uri}">

在请求对象https://sling.apache.org/apidocs/sling7/org/apache/sling/api/SlingHttpServletRequest.html下可用的方法

其他有用的HTL全局对象: https://docs.adobe.com/content/help/en/experience-manager-htl/using/htl/global-objects.html