当我尝试将NotesXSPDocument传递给具有runWithDocumentContext的代理来操作某些字段时,我从未将新值传递给前端字段。我尝试过fullrefresh和partialrefresh。当我打印字段值时,我成功地获得了更改。
以下是XPage的示例
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:panel id="thePanel">
<xp:this.data>
<xp:dominoDocument var="document" formName="from"></xp:dominoDocument>
</xp:this.data>
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="thePanel">
<xp:this.action><![CDATA[#{javascript:
var agent = database.getAgent("test");
agent.runWithDocumentContext( document.getDocument());
print( "Value-->" + document.getDocument().getItemValueString("InMemReturn"));}]]>
</xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:inputText id="inputText1" value="#{document.InMemReturn}"></xp:inputText>
</xp:panel>
</xp:view>
这是代理
Option Public
Option Declare
Sub Initialize
Dim session As New NotesSession
Dim doc As NotesDocument
Set doc = session.Documentcontext
doc.Appenditemvalue "InMemReturn", CStr(Now)
End Sub
我错过了什么吗?
答案 0 :(得分:3)
在绑定到输入字段的代理中处理文档很棘手。 XPage运行时并不真正了解代理正在做什么。通常,您最好将代理转换为Java bean并调用该bean。它使您有机会清理代码并优化性能。它还消除了为操作加载代理运行时的性能损失。 &#34;我想重用现有代码&#34;在这里经常被高估...
但你问......所以我们走了。文档建议您可以使用
agent.runWithDocumentContext(document.getDocument(true));
确保应用后端更改。尝试一下,让我们知道它是怎么回事。我实际上会采用稍微不同的方法并将输入字段绑定到视图变量,并仅将其写入保存事件。类似的东西:
<xp:inputText id="inputText1" value="#{viewScope.InMemReturn}"></xp:inputText>
在您的SSJS中:
var agent = database.getAgent("test");
var doc = document.getDocument(true);
agent.runWithDocumentContext(doc);
viewScope.InMemReturn = doc.getItemValueString("InMemReturn");
并在querySave事件中:
document.getDocument().replaceItemValue("InMemReturn",viewScope.InMemReturn);
让我们知道它是怎么回事。
答案 1 :(得分:-1)
您不在论坛中保存文件
Call Doc.save(false,true,false)