Xpages #{javascript:viewScope.something}赢了';t在上下文之后更新。重定向Topage(…)

Xpages #{javascript:viewScope.something}赢了';t在上下文之后更新。重定向Topage(…),xpages,xpages-ssjs,Xpages,Xpages Ssjs,不久前我问过,这是关于在csjs诱导的完全刷新之后更新属性包的问题。我用一个URL参数解决了这个问题,该参数导致一个context.redirectToPage 现在我有了一个基于jquery的xPage,它从viewScope接收一个包含JSON数据的字符串,并将该数据显示在表中。当我在网格中编辑一条记录并点击'submit'时,网格会发布一个名为'oper'的参数,其值为'edit','add',等等,为此我签入页面的beforePageLoad事件,然后执行托管bean的save方法。在这

不久前我问过,这是关于在csjs诱导的完全刷新之后更新属性包的问题。我用一个URL参数解决了这个问题,该参数导致一个context.redirectToPage

现在我有了一个基于jquery的xPage,它从viewScope接收一个包含JSON数据的字符串,并将该数据显示在表中。当我在网格中编辑一条记录并点击'submit'时,网格会发布一个名为'oper'的参数,其值为'edit','add',等等,为此我签入页面的beforePageLoad事件,然后执行托管bean的save方法。在这之后,我用新的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);
}}]]>
0){
saveGridDoc('RequestDummy','PersonRequestsDummy',param);
}
put('jsonString',bccView.getViewColumnValue('PersonRequestsDummyJson',1));
print('jsonString in viewScope:'+viewScope.get('jsonString'));
if(bccUser.isAdmin()&¶m.containsKey('oper')&¶m.get('oper').toString().length>0){
var url=context.getUrl().toSiteRelativeString(上下文);
if(url.indexOf(“?”)!=-1){
url+=“&doRefresh=true”;
}否则{
url+=“?doRefresh=true”;
}
打印(“重定向到:“+url”);
重定向Topage(url);
}}]]>

在服务器控制台中,我可以从第一个print语句中看到正确的、更新的JSON字符串,因此save方法成功,并且我的viewScope中有最新的数据。但是,网格不显示更新的数据,我的测试div也不显示

在更新viewScope之后,我还尝试了部分刷新网格和div,但同样的情况也发生了。手动刷新页面后,一切又恢复正常。那么,这里发生了什么?我只想把一个简单的字符串传递给一个控件。关于xPages生命周期和事件顺序,我又错了吗


提前谢谢。尊敬的Sarah

我认为您正在丢失
重定向Topage
中的
查看范围
值。请尝试使用
requestScope
sessionScope

谢谢所有的建议,我都试过了,但不幸的是没有成功。最有趣的是,当我将clientside alert语句放入onClientLoad事件时,它只会在我进入页面时触发一次,但不会在任何context.redirect或.reload命令之后触发。 毕竟我用以下方法解决了这个问题:

我从beforePageLoad事件中删除了redirect命令,并将以下参数添加到jqGrid()的submit函数中:


这对我来说是可行的(此后还会再次触发OnClient Load),但我仍然想知道,为什么服务器端引发的页面刷新与客户端刷新不一样,或者无法模拟客户端刷新。

我不确定beforePageLoad事件是否正确,您是否考虑过在beforeRenderResponse中生成JSON?

我刚刚尝试过,先是使用requestScope,然后是使用sessionScope,但结果是一样的。您是否在同一nsf中使用重定向?是否尝试同步viewScope调用?是否重定向到同一页面?如果是这样,请尝试改用context.reloadPage()。
afterSubmit: function(response, postdata) {window.location.href=window.location.href;return [true,'',''];}