<s:iterator>中的"status"有什么作用?

Sid*_*rth 1 jsp iterator struts2

我使用以下命令显示'userList'中的值

<s:iterator value="userList" status="rowStatus">
  <tr class="even"> 
    <td><s:property value="tweet_id" /></td>
    <td><s:property value="message" /></td>
    <td><s:property value="created" /></td>
  </tr>
</s:iterator>
Run Code Online (Sandbox Code Playgroud)

什么是使用status="rowStatus"这个命令?

Ken*_*man 6

来自docs.

迭代器标记可以导出IteratorStatus对象,以便可以获取有关迭代状态的信息,例如:

index: current iteration index, starts on 0 and increments in one on every iteration
count: iterations so far, starts on 1. count is always index + 1
first: true if index == 0
even: true if (index + 1) % 2 == 0
last: true if current iteration is the last iteration
odd: true if (index + 1) % 2 == 1
Run Code Online (Sandbox Code Playgroud)

   <s:iterator status="rowStatus" value='{0, 1}'>
      Index: <s:property value="%{#rowStatus.index}" /> <br />
      Count: <s:property value="%{#rowStatus.count}" /> <br />  
   </s:iterator>
Run Code Online (Sandbox Code Playgroud)

将打印

  Index: 0
  Count: 1
  Index: 1
  Count: 2
Run Code Online (Sandbox Code Playgroud)

在您的userList中

userList count = 1 to userList.size();
userList index = 0 to userList.size() - 1;
Run Code Online (Sandbox Code Playgroud)


And*_*ios 5

在你的情况下,没有。

迭代时,当前对象被推到值堆栈的顶部。这意味着您可以通过简单地使用它的名称(以及许多其他方式)来访问它。

您可以根据需要将此值用于value属性。

但是,如果(在与您的情况不同的情况下,但您肯定很快会遇到)您需要将此值放在将提交回(其他) Action的表单字段,以List<YourObject>属性为目标,那么您需要使用 IteratorStatus挂载正确的name属性。例如:

源动作

private List<User> sourceUserList; 
Run Code Online (Sandbox Code Playgroud)

目标动作

private List<User> updatedUserList; 
Run Code Online (Sandbox Code Playgroud)

JSP

<s:form action="targetAction">
  <s:iterator value="sourceUserList" status="rowStatus">

    <s:hidden name="updatedUserList[%{#rowStatus.index}].id" value="id"/>
    <s:property value="id" />

    <s:textfield name="updatedUserList[%{#rowStatus.index}].name" value="name" />
    <s:textfield name="updatedUserList[%{#rowStatus.index}].age"  value="age"  />

  </s:iterator>
  <s:submit/>
</s:form>
Run Code Online (Sandbox Code Playgroud)

知道了 ?