如何使用sling servlet为现有节点创建新属性?

时间:2015-02-19 11:18:49

标签: java aem sling

我在Sling Servlets中有一个任务。在我的应用程序中,我将在与登录用户相对应的节点内创建一个属性,并为此属性添加一个布尔值。这必须在用户第一次登录时动态完成。在后续登录时,必须提取此属性以进行验证。

为获取资源,我编写了以下代码行。

ResourceResolver resourceResolver = slingRequest.getResourceResolver();     资源campaignResource = resourceResolver.getResource(“/ home / users / V / VSukz / profile”); ValueMap campaignProperties = campaignResource.adaptTo(ValueMap.class); String title = campaignProperties.get(“category”,“”);

对于Post,我无法这样做。我需要这方面的帮助。

2 个答案:

答案 0 :(得分:1)

以下是示例,如何获取javax.jcr.Session对象,如何查找Node对象以及如何向节点添加属性。

public class ExampleServlet extends SlingAllMethodsServlet {

    @Reference(policy=ReferencePolicy.DYNAMIC, cardinality=ReferenceCardinality.MANDATORY_UNARY)
    protected SlingRepository repository;

    @Override
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        Session session= null;
        String path = "/path/to/your/node";
        try {
            session = repository.loginService(null, null); // this method requires additional setting in Apache Sling Service User Mapper Service. (AEM6)
            //session = repository.loginAdministrative(repository.getDefaultWorkspace()); //this method is deprecated (it was used in previous versions)
            Node node = session.getNode(path);
            node.setProperty("propertyName", "propertyValue");
            session.save();
        } catch (Exception e) {
            log.error(ExceptionUtils.getStackTrace(e));
            e.printStackTrace();
        } finally {
            if(session != null) session.logout();
        }

    }

    @Override
    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException{
        doGet(request,response);
    }
}

答案 1 :(得分:0)

请参阅How to set a resource property

使用新版本的Sling,ModifiableValueMap可以派上用场来设置JCR节点中的值。