我在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,我无法这样做。我需要这方面的帮助。
答案 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节点中的值。