全局Javascript变量变为null
我有一个在javascript中使用全局变量的xPages应用程序。全局变量是一个NotesDocument。当xPage加载时,它调用一些填充全局Javascript变量的Java代码 过了一会儿,我从全局变量中提取了一些信息,一切正常。稍后在代码中,我从一个Javascript库中运行了一个函数,该函数试图访问该全局变量,结果为null。我不知道为什么。没有其他任何东西可以更新该全局变量 有人能给我指个方向来解决这个问题吗全局Javascript变量变为null,javascript,xpages,Javascript,Xpages,我有一个在javascript中使用全局变量的xPages应用程序。全局变量是一个NotesDocument。当xPage加载时,它调用一些填充全局Javascript变量的Java代码 过了一会儿,我从全局变量中提取了一些信息,一切正常。稍后在代码中,我从一个Javascript库中运行了一个函数,该函数试图访问该全局变量,结果为null。我不知道为什么。没有其他任何东西可以更新该全局变量 有人能给我指个方向来解决这个问题吗 //This is the script library f
//This is the script library function that throws the null error:
var revoPayments =
{
// Calculate if the occupant should see the Revo Pay My Bill Link in the occ navigator
"renderPayMyBillRevo" : function()
{
var result = false;
try
{
// THIS IS WHERE THE GLOBAL VAR IS NULL
if( parseInt( gUserOccupantProfile.getShowRevoLink() ) == -1 )
result = true;
} catch (e)
{
print(e.message);
}
print( "result: " + result );
return result;
}
}
//This is the calling javascript from the xPage which works fine pulling all the values etc.
if( gUserOccupantProfile && gUserOccupantProfile !== "null" && gUserOccupantProfile !== "undefined" )
{
// ALL THESE VALUES ARE SET BECAUSE IT'S A VALID OBJECT
sessionScope.put( "OccupantUNID", gUserOccupantProfile.getDocUNID());
sessionScope.put( "Tenant_ID", gUserOccupantProfile.gettenant_id() );
sessionScope.put( "UnitRefNo", gUserOccupantProfile.getUnitRefNo() );
sessionScope.put( "Resident", gUserOccupantProfile.getResident() );
sessionScope.put( "FirstName", gUserOccupantProfile.getFirstName() );
sessionScope.put( "LastName", gUserOccupantProfile.getLastName() );
sessionScope.put( "CurrentUser", gUserOccupantProfile.getFirstName() + " " + gUserOccupantProfile.getLastName() );
sessionScope.put( "PropertyAddress", gUserOccupantProfile.getPropertyAddress() );
var tempStr = gUserOccupantProfile.getcurrent_balance();
tempStr = tempStr.replace( "$", "" );
tempStr = tempStr.replace( ",", "" );
sessionScope.put( "Current_Balance", tempStr );
sessionScope.put( "PropertyNo", gUserOccupantProfile.getPropertyNo() );
sessionScope.put( "PropertyName", gUserOccupantProfile.getPropertyName() );
sessionScope.put( "LastPaymentDate", gUserOccupantProfile.getLast_payment_date() );
sessionScope.put( "LastPaymentAmount", gUserOccupantProfile.getPayment_amount() );
gAPropertyProfile = eStarService.getPropertyProfile( sessionScope.get( "PropertyNo" ) );
// 09.15.2014 - Steven Rieger : added code to disable pay my bill for separate properties
// Default is to always display the option.
if( gAPropertyProfile.getDisablePayMyBill().toLowerCase() == "yes" )
sessionScope.put( "renderPayMyBill", false );
else
sessionScope.put( "renderPayMyBill", true );
sessionScope.put( "renderStatements", myEStatements.renderStatements() );
print( "Before RenderRevo" );
// THIS LINE FAILS BECAUSE IN THE SCRIPT LIBRARY CODE ( SEE ABOVE ) THE
// GLOBAL VAR IS NULL
sessionScope.put( "renderPayMyBillRevo", revoPayments.renderPayMyBillRevo() );
print( "After RenderRevo" );
// sessionScope.put( "dialogOopsTitle", "Debug!" );
// sessionScope.put( "dialogOopsMessage", "gotLogEntry: " + gotLogEntry );
// var dialogOops = getComponent( "dialogOops" );
// dialogOops.show();
}
我很确定你不能这样做。不能让全局SSJS变量包含带有代码的方法函数。我相信,In可以包含具有“静态”值的函数。 建议你看看这个帖子:
专注于蒂姆·特里科尼的回答
我应该补充一点,最好的解决方案是将此代码移动到Java托管bean中。另一种SSJS解决方案可能是,不将所有这些值放在不同的作用域变量中。。。创建一个HashMap并使用它替换所有作用域变量。然后,可以将整个映射传递给脚本库中的SSJS函数,以检查映射并给出您正在寻找的答案。只是大声想一下…我很确定你不能这样做。不能让全局SSJS变量包含带有代码的方法函数。我相信,In可以包含具有“静态”值的函数。 建议你看看这个帖子:
专注于蒂姆·特里科尼的回答
我应该补充一点,最好的解决方案是将此代码移动到Java托管bean中。另一种SSJS解决方案可能是,不将所有这些值放在不同的作用域变量中。。。创建一个HashMap并使用它替换所有作用域变量。然后,可以将整个映射传递给脚本库中的SSJS函数,以检查映射并给出您正在寻找的答案。在那里大声思考…快速提示:您可能想要更改
gUserOccupantProfile!==“null”&&gUserOccupantProfile!==“未定义”
到gUserOccupantProfile!==null&&gUserOccupantProfile!==undefined
。gUserOccupantProfile是在我的脚本库顶部定义的全局文件(代码中未显示)。我在线阅读了一些内容,如果它们是字符串值“null”或“undefined”以及if(gUserOccupantProfile),这两个文件会发现问题是否捕获空的或未定义的对象?仅当您与实际的null
和undefined
值进行比较时。与字符串进行比较没有帮助。如果您这样做,这将是正确的:gUserOccupantProfile=“null”
,而如果您这样做:gUserOccupantProfile=null
。快速提示:您可能想要更改gUserOccupantProfile!==“null”&&gUserOccupantProfile!==“未定义”
到gUserOccupantProfile!==null&&gUserOccupantProfile!==undefined
。gUserOccupantProfile是在我的脚本库顶部定义的全局文件(代码中未显示)。我在线阅读了一些内容,如果它们是字符串值“null”或“undefined”以及if(gUserOccupantProfile),这两个文件会发现问题是否捕获空的或未定义的对象?仅当您与实际的null
和undefined
值进行比较时。与字符串进行比较没有帮助。如果您这样做,则是正确的:gUserOccupantProfile=“null”
,如果您这样做,则不是:gUserOccupantProfile=null
。我将很快回顾这一点。我不得不说,我有第二个javascript函数,它非常相似,但作用于不同的全局SSJS对象,而且这个函数运行得很好,所以我感到困惑。不过,我确实有几个bean(两个全局变量也是如此),我试图将这种逻辑排除在bean之外,因为它只针对UI,而且bean在不同的应用程序中都有使用。您可以使用“pageBean”作为UI的控制器。我一直都是在Jesse Gallagher的一个小框架的帮助下这样做的,但是你可以在一个页面上手动创建一个框架。尽管我强烈推荐UI相关代码的控制器框架,但我将很快对此进行回顾。我不得不说,我有第二个javascript函数,它非常相似,但作用于不同的全局SSJS对象,而且这个函数运行得很好,所以我感到困惑。不过,我确实有几个bean(两个全局变量也是如此),我试图将这种逻辑排除在bean之外,因为它只针对UI,而且bean在不同的应用程序中都有使用。您可以使用“pageBean”作为UI的控制器。我一直都是在Jesse Gallagher的一个小框架的帮助下这样做的,但是你可以在一个页面上手动创建一个框架。尽管我强烈推荐用于UI相关代码的控制器框架。