在我的OSGi包中的Java类中,我有一个页面的URI -
String pageUri = "/content/site/page.html" ;
Run Code Online (Sandbox Code Playgroud)
如何使用此URL创建Page对象?我基本上还需要稍后从对象中获取页面属性...
我在课堂上尝试了这段代码:
PageManager pm = new PageManager();
Page page = pm.getPage(pageUri);
Run Code Online (Sandbox Code Playgroud)
但这给了我编译错误:
Cannot instantiate the type PageManager
Run Code Online (Sandbox Code Playgroud)
您应该能够将ResourceResolverFactory实例注入组件/服务,并从那里解析资源/页面,如获取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);
}
}
Run Code Online (Sandbox Code Playgroud)
它使用一个管理登录这是不理想的.我建议使用请求中的ResourceResolver.最简单的方法是将它作为方法参数传递getSpecificPage(resourceResolver)给组件/ servlet(上).
更新: 在更新版本的Sling(大约2014年,AEM6 +)中执行此操作的正确方法是使用Sling Service Authentication.现在不推荐使用getAdministrativeResourceResolver方法.