gpt4 book ai didi

aem - 使用 URL 在 Java 类中创建 Page 对象

转载 作者:行者123 更新时间:2023-12-04 23:02:59 25 4
gpt4 key购买 nike

在我的 OSGi 包中的 Java 类中,我有一个页面的 URI -

String pageUri = "/content/site/page.html" ;

如何使用此 URL 创建 Page 对象?我基本上还需要稍后从对象中获取页面属性......

我在类里面尝试了这段代码:
PageManager pm = new PageManager();
Page page = pm.getPage(pageUri);

但这给了我编译错误:
Cannot instantiate the type PageManager

最佳答案

您应该能够将 ResourceResolverFactory 实例注入(inject)到您的组件/服务中,并从那里解析资源/页面,如 Getting Resources and Properties in Sling 中所述。 .

例如:

@Component(immediate = true)
@Service(GetMeAPage.class)
public class GetMeAPage {

@Reference
private ResourceResolverFactory resourceResolverFactory;

private static final String pageUri = "/content/site/page.html";

/**
* This method is executed at component startup rather than in the context of a request.
*/
@Activate
public void getSpecificPage() {
ResourceResolver resourceResolver = null;
try {
resourceResolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
Page page = getSpecificPage(resourceResolver);
System.out.println(page.getTitle());
} catch (LoginException e) {
e.printStackTrace();
} finally {
if (resourceResolver != null) {
resourceResolver.close();
}
}
}

public Page getSpecificPage(ResourceResolver resourceResolver) {
Resource resource = resourceResolver.resolve(pageUri);
return resource.adaptTo(Page.class);

}
}

Full code in this gist

这使用管理登录名 not ideal .我建议使用请求中的 ResourceResolver。最简单的方法是将其作为方法参数传递给 getSpecificPage(resourceResolver) (上)来自您的组件/servlet。

更新:
在较新版本的 Sling(大约 2014 年,AEM6+)中执行此操作的正确方法是使用 Sling Service Authentication . getAdministrativeResourceResolver 方法现在已弃用。

关于aem - 使用 URL 在 Java 类中创建 Page 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18503303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com