for循环中的SessionScope变量

时间:2017-03-07 01:21:24

标签: xpages

我正在尝试在xpages应用程序中申请循环。

在计算字段中,我输入以下代码,并按预期显示结果。

var msg = "";

for(var j = 1; j <5;j++)
{
    msg += "* This message is from  " +j +" " ;
}
return msg;

//Result will show something like this
//"* This message is from 1 * This message is from 2 * This message is from 3 * This message is from 4 * This message is from 5 "

假设在页面A中有一个多行编辑框,它使用sessionScope变量(ssvTopic)。在页面B中有一个计算字段,我可以使用此代码

显示多行编辑框中的值
sessionScope.ssvTopic

这很好用。现在我尝试在for循环中应用sessionScope变量。

var msg ="";
var value = sessionScope.ssvTopic

for(var i =0; i< value.length; i++)
{
    msg += "* This message is from  " + value+" " ;
}
return msg;

当我运行应用程序时,我注意到value.length表示值中的字符数。我的意思是如果sessionScope.ssvTopic值是生活方式,新闻,体育,字符是24,所以在for循环中,消息将显示24次。

所以我将代码value.length更改为@Count(value)。当我运行应用程序时,消息只显示一次。

var msg ="";
var value = sessionScope.ssvTopic

for(var i =0; i< @Count(value); i++)
{
    msg += "* This message is from  " + value+" " ;
}
return msg;

//The result display like this, it only display one time
//* This message is from life style, news, sports

我认为@Count(value)接近结果(与value.length比较),但我不明白为什么它只显示一次消息。

我也尝试将sessionScope值放在一个数组中,但结果是一样的,它只显示一条消息。

var msg ="";
var value = sessionScope.ssvTopic
var valueArray = new Array();

viewScope.put("valueArray", @Implode(valueArray, ",")) ;
valueArray.push(value);

//no matter if I use @Count(valueArray) or valueArray.length, the result does not have difference
for(var i =0; i< @Count(valueArray); i++) 
{
    msg += "* This message is from  " + valueArray+" " ; //no matter if I use valueArray or valueArray[i], the result does not have difference too
}
return msg;

我不确定哪个部分我弄错了。我打算做的是显示消息的数量取决于sessionScope变量值的数量。在我的情况下,如果sessionScope变量包含生活方式,新闻,体育,结果将像这样

* This message is from life style * This message is from news * This messages is from sports

如果我再次运行此代码,它可以正常工作。

var msg = "";

for(var j = 1; j <5;j++)
{
    msg += "* This message is from  " +j +" " ;
}
return msg;    

所以我只需改变&#34; 5&#34;对于sessionScope变量,它不会显示消息数量取决于sessionScope变量值的数量。

有人会让我知道如何解决这个问题。非常感谢。

(快速更新)

我尝试以下代码,但它不会返回任何内容。

 for(var i =0; i< sessionScope.ssvTopic; i++) 
{
    msg += "* This message is from  " + ssvTopic[i]+" " ;  // with [i] or without [i], the result is the same, it does not return anything
}
return msg;

我没有返回消息,而是尝试返回其他内容,如@Count(value),@ Count(valuArray),valueArray.length。

@Count(value) //this returns 1.0
@Count(valueArray) //this returns 1.0
valueArray.length //this returns 1.0
value.length //this return 24.0 as mentioned above, this returns the number of characters of the value

因此我在代码中注意到这是一个错误,但我不明白错误只返回1.0的结果。

1 个答案:

答案 0 :(得分:0)

你错过了一件小事让它上班:

var msg = "";
var value = sessionScope.ssvTopic.split('\n');

for(var i = 0; i < value.length; i++) {
    msg += "* This message is from  " + value[i] + " " ;
}
return msg;

多行编辑框返回多行字符串,而不是字符串数组。所以,你需要先用换行符split字符串。然后,您可以使用生成的数组。

(@ Count始终返回 1 ,因为多行编辑框的值仅为一个字符串)