使用URL在Java类中创建页面对象

Rij*_*hna 4 aem

在我的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)

dif*_*ffa 6

您应该能够将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方法.