Xpages 为什么DominoDocumentData.setConcurrencyMode对Domino文档数据源没有影响?

Xpages 为什么DominoDocumentData.setConcurrencyMode对Domino文档数据源没有影响?,xpages,Xpages,我曾经以某种方式保存XPage的当前DominoDocument,如: UIViewRootEx2 view=(UIViewRootEx2) FacesContext.getCurrentInstance().getViewRoot(); DominoDocumentData ddd=(DominoDocumentData) view.getData().get(0); DominoDocument dominoDoc=(DominoDocument) ddd.getDataObject();

我曾经以某种方式保存XPage的当前DominoDocument,如:

UIViewRootEx2 view=(UIViewRootEx2) FacesContext.getCurrentInstance().getViewRoot();
DominoDocumentData ddd=(DominoDocumentData) view.getData().get(0);
DominoDocument dominoDoc=(DominoDocument) ddd.getDataObject();
//ddd.setConcurrencyMode("force");
dominoDoc.save();
为了使用数据源的concurrencyMode属性来避免冲突,我添加了以下行

ddd.setConcurrencyMode("force");
我希望这与在XPage中设置属性的行为相同:

<xp:dominoDocument var="document1" formName="Test" computeWithForm="onsave" concurrencyMode="force"></xp:dominoDocument>


但它失败了。它总是使用XPage源中的值集,而忽略代码中的值集。有人知道原因吗?谢谢。

我想说:按设计工作。在其中一个过程中,读取设计并覆盖值

在JSF和XPages中,您不会将“控制器代码”(按钮中的内容)与“视图渲染”(XPages源代码)混为一谈。而是将属性绑定到模型(范围变量是一个很好的候选者),让运行时运行它的过程

所以你的代码是

<xp:dominoDocument var="document1"
              formName="Test"
       computeWithForm="onsave"
       concurrencyMode="#{viewScope.myConcurrency}">
</xp:dominoDocument>

希望能澄清这一点。

请详细说明“它失败了”。它会抛出错误吗?代码是否在该点中止。或者它只是被忽略而保存继续?如果是最后一个选项,请包括“保存”按钮的设置,因为“提交类型”按钮保存所有数据源,而不管添加了什么SSJS代码。@PaulStephenWithers,没有错误。它只使用XPage中设置的concurrencyMode值,而不使用Java代码中的值。我使用普通按钮而不是提交按钮。谢谢你的努力。但我不同意它的设计。我知道JSF阶段和MVC。第一阶段。还原视图2。应用请求值3。过程验证4。更新模型值5。调用应用程序6。呈现响应,我的java代码在第5阶段运行。它可以读取concurrencyMode的当前值、修改文档、保存文档以及执行所有类似的操作。但是为什么不能修改并发模式并在这里工作呢?该规范非常模糊,在涉及数据源时允许进行各种操作。我是jsf,你绑定到不同的bean。你试过计算属性了吗?如果这样做有效的话,你有一个解决方案。我还发现:绑定属性比试图在代码中更改它们更可靠。考虑将控件放入视图组件的一部分。在MVC中,我们不修改它,而是修改模型。我在bean中更改属性concurrencyMode,因为我不想每次添加文档数据源时都设置它。检查冲突应该是一种选择,而不是默认行为。简单地保存较新版本比创建冲突更容易实现。在经典的notes web应用程序中,我们甚至无法推迟冲突。对于MVC来说,关于外观的东西,例如字体、颜色、视图、数据源显然是模型。JavaBean可以是基于其功能的控制器或模型。没有理由只能在视图中设置数据源属性,而不能在codeWell中设置。原因是:因为它是以这种方式实现的:-)
viewScope.myConcurrency = "force"