不久前,我问了这个问题,这是关于在 csjs 引起的完全刷新后更新属性包。我用一个指向 context.redirectToPage 的 URL 参数解决了这个问题。
现在我有一个带有基于 jquery 的jqGrid 的xPage,它从 viewScope 接收带有 JSON 数据的字符串,并将该数据显示在表中。当我在网格中编辑记录并点击“提交”时,网格会发布一个名为“oper”的参数,其中包含“edit”、“add”等值,为此我检查页面的 beforePageLoad 事件然后执行我的托管 bean 的保存方法。在此之后,我用新的 JSON 字符串更新 viewScope 变量,并以上述方式进行完全刷新,这在以前是有效的。
<xp:this.beforePageLoad><![CDATA[#{javascript:
if (bccUser.isAdmin() && param.containsKey('oper') && param.get('oper').toString().length>0) {
bccGridDataHandler.saveGridDoc('RequestDummy','PersonRequestsDummy',param);
}
viewScope.put('jsonString',bccView.getViewColumnValue('PersonRequestsDummyJson',1));
print('jsonString in viewScope: '+viewScope.get('jsonString'));
if (bccUser.isAdmin() && param.containsKey('oper') && param.get('oper').toString().length>0) {
var url = context.getUrl().toSiteRelativeString(context);
if (url.indexOf('?')!=-1) {
url += "&doRefresh=true";
} else {
url += "?doRefresh=true";
}
print("redirecting to: "+url);
context.redirectToPage(url);
}}]]>
在服务器控制台中,我可以从第一个打印语句中看到正确、更新的 JSON 字符串,因此保存方法成功,并且我的 viewScope 中有最新数据。但是,网格不显示更新的数据,我的 test-div 也不显示
<xp:text value="#{javascript:viewScope.get('jsonString')}" />
在更新 viewScope 后,我还尝试对网格和 div 进行部分刷新,但同样的情况发生了。手动刷新页面后一切正常。那么,这里发生了什么?我只想将一个简单的字符串传递给控件。我是否又误会了 xPages-Lifecycle 和事件的顺序?
提前致谢。问候,莎拉