如何使用JSP中的Struts2迭代器动态设置结束属性

时间:2015-07-27 10:44:27

标签: java jsp struts2 scriptlet struts-tags

<% 
    RegisterAction aro=new RegisterAction();    
    int count=aro.getLi().size();
%>

<s:iterator value="li" begin="0" end="1">
    <fieldset>
        name     : <s:property value="name"     /><br/>
        password : <s:property value="password" /><br/>
        email    : <s:property value="email"    /><br/>
        gender   : <s:property value="gender"   /><br/>
        country  : <s:property value="country"  /><br/>
    </fieldset>
</s:iterator>

如何动态设置end属性值以进行迭代,阅读count变量?

如果我使用end="<%=count%>",则无效。

如果我使用end="count"它正在运行,但如果我刷新页面或重新加载,我会得到相同结果的多个数字。

2 个答案:

答案 0 :(得分:0)

如果你在pageContext中按下它们,你可以在OGNL中使用#attr表示法来读取Scritplet块中设置的变量:

<% 
    RegisterAction aro = new RegisterAction();
    int count = aro.getLi().size();
    pageContext.setAttribute("count", count); // pushing the variable into the pageContext
%>

<s:iterator value="li" begin="0" end="%{#attr['count']}">
    <fieldset>
        name     : <s:property value="name"     /><br/>
        password : <s:property value="password" /><br/>
        email    : <s:property value="email"    /><br/>
        gender   : <s:property value="gender"   /><br/>
        country  : <s:property value="country"  /><br/>
    </fieldset>
</s:iterator>

但是你永远不应该使用Scriptlet for many reasons

使用Struts标签代替脚本也非常容易,like shown in this answer

编辑

  

如果我使用end="count"它正在工作,但如果我刷新页面或重新加载,我会得到相同结果的多个数字。

然而,不清楚为什么要在Scriptlet块中实例化一个Action,然后为什么你希望计数结果在页面加载中不同,因为你的代码总是引用一个处于初始状态的集合。 / p>

如果RegisterAction 你当前的行动,那么你想要的可能是:

<s:iterator value="li" begin="0" end="%{li.size()}">

实际上是

<s:iterator value="li">

并且您通过因子2337过度复杂的简单迭代。

答案 1 :(得分:0)

最后,我得到了答案,因为我希望你可以在动作类中使用下面的代码从db count初始化arraylist

int l1=st.executeUpdate("select count(*) from strutsuser");
         li=new ArrayList<RegisterAction>(l1);

查看jsp是

<s:iterator value="li" >

<fieldset >
name : <s:property value="name"/><br/>
password : <s:property value="password"/><br/>
email : <s:property value="email"/><br/>
gender : <s:property value="gender"/><br/>
country : <s:property value="country"/><br/>

</fieldset>

</s:iterator>

即使我们使用struts迭代器刷新页面,这也将解决相同记录的多次显示的数量。