<%
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"
它正在运行,但如果我刷新页面或重新加载,我会得到相同结果的多个数字。
答案 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迭代器刷新页面,这也将解决相同记录的多次显示的数量。