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

How to set end attribute dynamically with Struts2 iterator in JSP

<% 
    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" 它可以正常工作,但如果我刷新页面或重新加载,我会得到相同的数字倍数结果。

您可以使用 OGNL 中的 #attr 符号来读取 Scritplet 块中设置的变量,如果您将它们推送到 pageContext 中:

<% 
    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 标签代替 scriptlet 也很容易,like shown in this answer


编辑

If I use end="count" it's working but I am getting same result multiple of numbers if I refresh the page or reload.

然而,您不清楚为什么要在 Scriptlet 块中实例化一个 Action,然后为什么您希望 count 的结果在页面加载中有所不同,因为您的代码总是引用处于初始状态的集合.

如果 RegisterAction 是您当前的操作,那么您想要的可能是:

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

事实上

<s:iterator value="li">

并且您将简单的迭代复杂化了 2337 倍。

你好,最后我得到了答案,我希望你可以使用下面的代码在操作中使用 class 从 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 迭代器刷新页面,这也将解决同一记录的多次显示数。