Xpages sessionScope变量为空

Xpages sessionScope变量为空,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我正在尝试处理sessionScope变量,但它们在下一页上不会立即被识别。很抱歉这里有很多信息,但有什么想法吗 第一个XCpage有一个名为ccMultipleLoadHandlers的customControl。在自定义控件中有一个repeat控件,它获取Domino视图中数据的句柄,最后一列是一个链接,它设置了几个sessionScope变量并打开另一个XPage。这是链接的代码 <xp:link

我正在尝试处理sessionScope变量,但它们在下一页上不会立即被识别。很抱歉这里有很多信息,但有什么想法吗

第一个XCpage有一个名为ccMultipleLoadHandlers的customControl。在自定义控件中有一个repeat控件,它获取Domino视图中数据的句柄,最后一列是一个链接,它设置了几个sessionScope变量并打开另一个XPage。这是链接的代码

                                        <xp:link
                                            escape="true"
                                            id="link3"
                                            text="${langBean.labelEdit}"
                                            value="/RemanRental.xsp">
                                            <xp:this.onclick><![CDATA[#{javascript:sessionScope.calitm=""}]]></xp:this.onclick>
                                            <xp:eventHandler
                                                event="onclick"
                                                submit="true"
                                                refreshMode="norefresh">
                                                <xp:this.action><![CDATA[#{javascript:importPackage(com.mycorpname);
dBar.info("Entering Link for ccRentMultLoadHandView")
try{
    var doc
    var calitm
    var caitm
    sessionScope.rentDisplay = "MultLoadHandDisplay";
    var hostURL = configBean.getValue("HostURL")
    var hostName = configBean.getValue("HostCommon")
    var dbName = configBean.getValue("rentalDbPath")
    var webPath = configBean.getValue("WebsiteURL")
    try{
        //var rtn
        var urlPath = hostURL+webPath
        dBar.info("urlPath:  "+urlPath)
        if(rowData.isDocument()){
            dBar.error("rowData is Document");
            doc = rowData.getDocument();
            if (doc != null){
                calitm = doc.getItemValue("CALITM");
                modelNbr = calitm[0];
                dBar.error("1. modelNbr="+modelNbr);
                modelNbr =modelNbr.slice(2);
                dBar.error("2. modelNbr="+modelNbr);
                sessionScope.calitm = modelNbr;
                dBar.error("CALITM IS "+sessionScope.calitm)
                caitm = doc.getItemValue("CAITM");
                sessionScope.caitm = caitm[0];
                dBar.error("ccRentMultLoadHandView >>>> CAITM IS "+sessionScope.caitm)
                var fam = doc.getItemValue("family");
                sessionScope.family=fam[0];
                var strURL = urlPath+"/Rental.xsp?"
                dBar.info("Returning:  "+urlPath+"/Rental.xsp?databaseName="+hostName+"!!"+dbName+"&documentId="+rowData.getUniversalID()+"&action=openDocument");
                sessionScope.urlPath = urlPath+"/RemanRental.xsp?databaseName="+hostName+"!!"+dbName+"&documentId="+rowData.getUniversalID()+"&action=openDocument"
                return urlPath+"/Rental.xsp?databaseName="+hostName+"!!"+dbName+"&documentId="+rowData.getUniversalID()+"&action=openDocument"
        } else {
                dBar.info("Unable to get handle on document");
            }
        }
    } catch (e) {
        dBar.info("1. ccRentMultLoadHandView >> link error >>>Unable to get handle on document.  " + e.toString());
        println("1. ccRentMultLoadHandView >> link error>>>>  " + e.toString());
        return e.toString()
    }

} catch (e) {
    dBar.info("2. ccRentMultLoadHandView >> link try error >> Unable to get handle on document.  " + e.toString());
        println("2. ccRentMultLoadHandView >> link try error>>>>  " + e.toString());
    return e.toString()
}}]]></xp:this.action>
                                            </xp:eventHandler>
                                        </xp:link>

打开的XPage有一个名为ccRentMultLoadHandleDisplay的自定义控件,该控件在afterPageLoad事件中包含代码。该代码是:

importPackage(com.mycorpname);
dBar.error(">>>> sessionScope.rentDisplay is "+sessionScope.rentDisplay+" <<<<")
if (sessionScope.rentDisplay=="MultLoadHandDisplay"){
try{

// ***** Get RENTAL Specs ****      
            var table = configBean.JdbcTable_03;
            sessionScope.jdbcTable = table;
            dBar.error("ccRentMultLoadHandDisplay>>>sessionScope.rentDisplay = "+sessionScope.rentDisplay);
            var caitm = sessionScope.caitm;
            dBar.info("ccCartonlampDisplay>>var caitm is:  "+caitm);
            var calitm = sessionScope.calitm;
            dBar.info("ccCartonlampDisplay>>var calitm is:  "+calitm);
            getComponent("modelNbr").setValue(calitm);
            dBar.warn("rentBean.getMultLoadHandData("+caitm+","+sessionScope.Region+","+ table+","+ sessionScope.family+")")
            var returnMap=new com.ibm.jscript.std.ObjectObject();
            returnMap = rentBean.getMultLoadHandData(caitm,sessionScope.Region, table, sessionScope.family);
            dBar.info( "Got Rental Specs");
            
            var i;
            var rmc //return map component
            var value
            //dBar.info("return map size: " + returnArray.size());
            sessionScope.returnArray=true
            //dBar.info("returnArray.getCACLLB()= "+returnArray.getCACLLB());
        
            // we will now set the values not set above.  what they gets set to depends on values set in othe fields above
            dBar.error("ccRentMultLoadHandDisplay>>>Entering CartonClampDisplay data");
            for ( i in returnMap ){
                dBar.warn("ccRentMultLoadHandDisplay>>>i = "+i.toUpperCase());
                rmc = i.toUpperCase();
                var value = returnMap[i];
                value = Number(returnMap[i])/100;
                //dBar.warn("RemanRental>>>value = "+value);
                var fieldVal;
                switch(rmc.trim()){
                    case "CAACMT":
                        fieldVal = String(returnMap[i]);
                        dBar.warn("ccRentMultLoadHandDisplay>>>String(value) CAACMT = "+fieldVal);  
                        getComponent(rmc.trim()).setValue(fieldVal);
                        break;
                    case "CAMFCL":
                        fieldVal = String(returnMap[i]);
                        dBar.warn("ccRentMultLoadHandDisplay>>>String(value) CAMFCL = "+fieldVal);  
                        getComponent(rmc.trim()).setValue(fieldVal);
                        dBar.warn(rmc.trim()+":  "+getComponent(rmc.trim()).getValue());
                        break;
                    default:
                        dBar.warn("ccRentMultLoadHandDisplay>>>value = "+value);
                        getComponent(rmc.trim()).setValue(value);
                        dBar.warn(rmc.trim()+":  "+getComponent(rmc.trim()).getValue());
                        break;
                }
                }
} catch(e){
    println("There was an error in ccRentCartonDisplay afterPageLoaad");
    dBar.error("ccRentMultLoadHandDisplay---->Error in afterPageLoad:  "+ e.toString());
    println("ccRentMultLoadHandDisplay-----> Error in afterPageLoad: "+ e.toString());
}
}
importPackage(com.mycorpname);
dBar.error(“>>>>sessionScope.rentDisplay为”+sessionScope.rentDisplay+”>var caitm为“+caitm”);
var calitm=sessionScope.calitm;
dBar.info(“ccCartonlampDisplay>>变量calitm为:“+calitm”);
getComponent(“modelNbr”).setValue(calitm);
dBar.warn(“rentBean.getMultLoadHandData(“+caitm+”、“+sessionScope.Region+”、“+table+”、“+sessionScope.family+”))
var returnMap=new com.ibm.jscript.std.ObjectObject();
returnMap=rentBean.getMultLoadHandData(caitm,sessionScope.Region,table,sessionScope.family);
dBar.info(“获得租赁规格”);
var i;
var rmc//返回映射组件
var值
//dBar.info(“返回映射大小:+returnArray.size());
sessionScope.returnArray=true
//dBar.info(“returnArray.getCACLLB()=”+returnArray.getCACLLB());
//现在,我们将设置上面未设置的值。它们的设置取决于上面其他字段中设置的值
dBar.错误(“CCrentMultiloadHandDisplay>>>输入CartonCampDisplay数据”);
对于(返回地图中的i){
dBar.warn(“ccRentMultLoadHandDisplay>>>i=“+i.toUpperCase());
rmc=i.toUpperCase();
var值=返回图[i];
值=编号(返回图[i])/100;
//dBar.warn(“RemanRental>>>value=“+value”);
var-fieldVal;
开关(rmc.trim()){
案例“CAACMT”:
fieldVal=字符串(returnMap[i]);
dBar.warn(“ccRentMultLoadHandDisplay>>>字符串(值)CAACMT=“+fieldVal”);
getComponent(rmc.trim()).setValue(fieldVal);
打破
案例“CAMFCL”:
fieldVal=字符串(returnMap[i]);
dBar.warn(“ccRentMultLoadHandDisplay>>>字符串(值)CAMFCL=“+fieldVal”);
getComponent(rmc.trim()).setValue(fieldVal);
dBar.warn(rmc.trim()+“:”+getComponent(rmc.trim()).getValue());
打破
违约:
dBar.warn(“ccRentMultLoadHandDisplay>>>value=“+value”);
getComponent(rmc.trim()).setValue(value);
dBar.warn(rmc.trim()+“:”+getComponent(rmc.trim()).getValue());
打破
}
}
}捕获(e){
println(“ccRentCartonDisplay afterpageload中存在错误”);
dBar.error(“ccRentMultLoadHandDisplay-->afterPageLoad中的错误:+e.toString());
println(“ccRentMultLoadHandDisplay-->afterPageLoad中的错误:+e.toString());
}
}
问题是sessionscope变量为null,但如果我重新加载页面,它们就会出现,并且代码会正确设置字段

以下是显示在调试工具栏中的消息

XXXXXX

09:29:40 3。西泽根=

09:29:40 3。函数=

09:29:40 2。modelNbr=

09:29:40 1。modelNbr=

09:29:40输入图像尝试代码

09:29:40>>>>进入后页加载

09:29:40>>>>sessionScope.rentDisplay为空

p09:29:40>页面加载之前:sessionScope.rentDisplay为null我创建了一个名为reoladPage的自定义控件,然后根据此帖子中的Knut Herrmann建议添加了客户端设置超时脚本块:。
我将自定义控件添加到XPage中。问题已解决。

我认为问题在于,您正在使用onclick for server-side JS,而这只适用于客户端JS(因此,我相信代码除了在浏览器控制台中生成错误外,什么都不做)-并且您正在使用norefresh作为刷新模式onClick事件用于服务器端javascript,是的,我正在使用norefresh:refreshMode=“norefresh”。我在上面添加了onClick事件的图像