我正在尝试在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的结果。
答案 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 ,因为多行编辑框的值仅为一个字符串)