如何使用 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 迭代器刷新页面,这也将解决同一记录的多次显示数。
<%
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
初始化 arraylistint 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 迭代器刷新页面,这也将解决同一记录的多次显示数。