Java 如何在struts集合标记中获取随机值

Java 如何在struts集合标记中获取随机值,java,javascript,jquery,jsp,struts2,Java,Javascript,Jquery,Jsp,Struts2,我在应用程序中使用struts2标记。我需要将值从script随机更改为s:set标记,并填充到javascript数组中。如果我动态添加,意味着我得到的输出为2012-diff+1,但我的预期输出为2011。我的代码是 var threeDatas = []; var prevyear = []; var diff; var flagthree = false; <% int j = 0;%> <s:iterator value="testlist"> pr

我在应用程序中使用struts2标记。我需要将值从script随机更改为s:set标记,并填充到javascript数组中。如果我动态添加,意味着我得到的输出为2012-diff+1,但我的预期输出为2011。我的代码是

var threeDatas = [];
var prevyear = [];
var diff;
var flagthree = false;

<% int j = 0;%>

<s:iterator value="testlist">
    prevyear.push(<s:property value="year"/>);
    if (<%= j - 1%> !== -1) {
        if (prevyear[<%= j - 1%>] !== prevyear[<%= j%>] - 1) {
            diff = prevyear[<%= j%>] - prevyear[<%= j - 1%>];
        }
        if (diff > 1) {                                                   
            for (inc = 1; inc < diff; inc++) {
                <s:set var="incyear"> <s:property value="year"/> - diff+1</s:set>
                 threeDatas.push(['<s:property value="#incyear"/>', null, null]);
            }
            flagthree = true;
            diff = 0;
        }

<% j++;%>

</s:iterator>
可以在JavaScript中使用eval()方法。所以,如果你能产生类似


var incyear=eval('-diff+1')

我找到了另一种方法,使用set

<s:set var="incyear"> <s:property value="year"/> - diff+1</s:set>
                 threeDatas.push([<s:property value="#incyear"/>+"", null, null]);

不要混淆概念(Javascript在客户机上执行,其余在服务器上执行),不要将业务逻辑放在视图中,不要使用Scriptlet。因为您使用的是Struts2,所以操作正好是放置所有这些内容的地方。但是我在客户端需要这个逻辑,有没有其他方法来实现这一点。不清楚这是什么样的逻辑,但是您是否知道,对于testlist的每个元素,您都会将发布在这里的整个代码(在迭代器之间)复制?如果你有100个元素,如果。。。如果。。。对于()。。。阻碍。我不确定你想要的是什么。试着通过添加用例来编辑你的问题:你拥有什么,你需要做什么。我添加了eval方法,就像你的建议一样,添加了incyear,但我的输出是incyear本身。它没有显示set tagTry this中的值:threeDatas.push([eval('-diff+1')+“”,null,null]);要了解我的意思,您可以尝试以下JavaScript:var a=45;警报(评估('1+a+45'));
<s:set var="incyear"> <s:property value="year"/> - diff+1</s:set>
                 threeDatas.push([<s:property value="#incyear"/>+"", null, null]);
var threeDatas = [];
var prevyear = [];
var diff;
var flagthree = false;
<% int j = 0;%>


<s:iterator value="testlist">
    prevyear.push(<s:property value="year"/>);
    if (<%= j - 1%> !== -1) {
        if (prevyear[<%= j - 1%>] !== prevyear[<%= j%>] - 1) {
            diff = prevyear[<%= j%>] - prevyear[<%= j - 1%>];
        }
        if (diff > 1) {                                                   
            for (inc = 1; inc < diff; inc++) {
                <s:set var="incyear"> <s:property value="year"/> - diff+1</s:set>
                 threeDatas.push([<s:property value="#incyear"/>+"", null, null]);
            }
            flagthree = true;
            diff = 0;
        }

<% j++;%>

</s:iterator>
['x', 'Cats','Dogs'],
 ['2008',   10, null],
 ['2009',   20, null],
 ['2010',   null, null],
 ['2011',   null, 23],
 ['2012',   null, 34]