如何在Sling Servlet中用ValueMap更新资源属性?遇UnsupportedOperationException
解决ValueMap修改时的UnsupportedOperationException问题
直接通过Resource.adaptTo(ValueMap.class)获取的是只读的ValueMap实例,调用put()方法自然会抛出UnsupportedOperationException。要修改JCR属性,你需要将Resource适配为ModifiableValueMap,它支持写入操作。
另外要注意:
- 确保你的
ResourceResolver拥有目标页面的修改权限(比如通过有权限的用户登录获取) - 修改完成后必须调用
resourceResolver.commit()提交更改,否则修改不会持久化到JCR中
修正后的代码如下:
Resource next = resources.next(); String path = next.getPath(); Resource contentResource = resourceResolver.getResource(path + "/jcr:content"); if (contentResource != null) { // 适配为可修改的ValueMap ModifiableValueMap modifiableMap = contentResource.adaptTo(ModifiableValueMap.class); if (modifiableMap != null) { modifiableMap.put("pageTitle", "MyProject"); // 提交更改到JCR resourceResolver.commit(); } }
内容的提问来源于stack exchange,提问作者Akshayakumar K
相关产品推荐
相关产品推荐

