我正在嘗試使用sessionScope變量來存儲文檔ID以標識要從定義的數據源分配的文檔。
在beforePageLoad中,我創建了一個文檔集合並做了一個簡單的搜索。如果找不到文檔,則會創建一個新文檔,否則會加載現有文檔。一切都很好。
問題:當我完全或部分刷新頁面時,sessionScope變量設置爲null。儘管到處都有多個打印語句,但我無法找到發生的情況。許多互聯網搜索沒有產生信息。 這裏是我的代碼:使用sessionScope變量計算數據源 - 變量在部分刷新和全部刷新時設置爲空
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xp_1="http://www.ibm.com/xsp/coreex">
<xp:this.beforePageLoad><![CDATA[#{javascript:sessionScope.ABBR="ASU";
sessionScope.uniSearchFormula = '@Contains(U_Abbr; "'+ sessionScope.ABBR + '")';
var checkExist:NotesDocumentCollection = database.search(sessionScope.uniSearchFormula);
var docid:NotesDocument = checkExist.getFirstDocument();
if (docid == null) {
print("Creating New Document")
var docid = database.createDocument();
docid.replaceItemValue("Form","University");
docid.replaceItemValue("U_Abbr", sessionScope.ABBR);
docid.replaceItemValue("U_Name", sessionScope.UniversityName);
docid.replaceItemValue("U_ContactName","Meerkat Watson");
docid.save();
} else {
print("Modifying Existing Document")
docid.replaceItemValue("U_ContactName","Meerkat Watson");
docid.save();
}
sessionScope.docid = docid;}]]></xp:this.beforePageLoad>
<xp:this.data>
<xp:dominoDocument var="UniversityDoc" formName="University"
action="editDocument" loaded="true" documentId="#{javascript:sessionScope.docid}">
</xp:dominoDocument>
</xp:this.data>
<xp:panel id="ButtonPanel">
<xp:div align="center">
<xp:table>
<xp:tr>
<xp:td>
<xp:button id="button3" value="Refresh Page">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:context.reloadPage()}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:td>
<xp:td align="center">
<xp:button id="button2" value="Full Update">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
</xp:eventHandler>
</xp:button>
</xp:td>
<xp:td>
<xp:button id="button1" value="Partial Update">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" id="eventHandler2" refreshId="OutputPanel">
</xp:eventHandler>
</xp:button>
</xp:td>
</xp:tr>
</xp:table>
</xp:div>
</xp:panel>
<xp:panel id="OutputPanel">
<xp:div align="center">
<xp:table>
<xp:tr>
<xp:td>
<xp:label value="sessionScope.docid = " id="label1">
</xp:label>
</xp:td>
<xp:td>
<xp:label value="#{javascript:sessionScope.docid}" id="label11">
</xp:label>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:label id="label2" value="University Name"></xp:label>
</xp:td>
<xp:td>
<xp:text escape="true" id="computedField1" value="#{UniversityDoc.U_Name}"></xp:text>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:label id="label3" value="University Abbr"></xp:label>
</xp:td>
<xp:td>
<xp:text escape="true" id="computedField2" value="#{UniversityDoc.U_Abbr}"></xp:text>
</xp:td>
</xp:tr>
</xp:table>
</xp:div>
</xp:panel>
</xp:view>
我認爲你有一些好的想法來改善代碼流。我將研究getDocumentbyKey並允許xpage創建文檔,而不是在beforePageLoad中執行。 –
getDocumentbyKey。 –