1

我是一名 Java 开发人员。我现在面对的是jackrabbit v.1.6.4。现在我的目标之一是在基于 Web 的 jcr 浏览器中创建节点,所以当我必须创建具有强制属性的节点时,当然会抛出异常约束。

我的问题是存在一种方式,在运行时创建期间获取强制属性?例如,为它们分配一些默认值,就可以保存节点。

一件非常好的事情是让 PropDef 的实例形成 NodeTypeDef,但从 Node 接口我只能获得 PropertyDefinition,在我的情况下这是无用的。

非常感谢所有人

祝你今天过得愉快

J。

4

3 回答 3

1

所以这段代码正是我想要的,我会提供给其他用户。

无论如何,非常感谢大家

                Node parent = (Node)session.getItem(path);//Jcr path to the parent node

                Node added = parent.addNode(newNodeName);//Add new node


                Workspace workspace = session.getWorkspace();                   
                NodeTypeManager ntMgr = workspace.getNodeTypeManager();

                NodeTypeRegistry ntReg=null;
                try {
                    ntReg = ((NodeTypeManagerImpl) ntMgr).getNodeTypeRegistry();
                } catch (ClassCastException e) {
                    e.printStackTrace();
                }

                NameFactory nameFactory = NameFactoryImpl.getInstance();
                Name namejcr = nameFactory.create(type);

                EffectiveNodeType effnodetype = ntReg.getEffectiveNodeType(namejcr);



                //Here i get all the property definition for this type of node, so from here i
                //can know which of them are mandatory
                PropDef[] pdefs = effnodetype.getAllPropDefs();
于 2010-11-09T13:22:09.140 回答
0

要确定财产是否受到保护,您可以执行以下操作:

PropertyDefinition propDef = property.getDefinition();
boolean isProtected = propDef.isProtected();

或者尝试按照这些思路来确定节点类型是否允许将某个属性设置为某个值:

Workspace workspace = session.getWorkspace(); 
NodeTypeManager ntMgr = wsp.getNodeTypeManager();
NodeType nt = ntMgr.getNodeType("nodeTypeName");
boolean canSet = nt.canSetProperty("propName", value);
于 2010-11-10T09:41:45.647 回答
0

当然,它是一段时间的垃圾箱,

和橡树是可用的。

但今天你可以使用以下内容:

javax.jcr.Property prop = xyz;
boolean isMandatoryProperty = prop.getDefinition().isMandatory(); 
于 2021-02-16T07:46:18.817 回答