提交表单中的多行数据,如何用struts2的iterator标签实现

时间:2022-09-20 19:41:02
先贴代码

<form action="AddSub" method="post">
<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<th class="h" style="width: 100%" colspan="4">
订阅名称<input type="text" name="sub.subname"/>
</th>
</tr>
<!--       表 头           -->
<tr class="tr2">
<td style="width: 20%" align="center">
属性名称
</td>
<td style="width: 20%" align="center">
谓词
</td>
<td style="width: 20%" align="center">
属性值
</td>
<td style="width: 20%" align="center">

</td>
</tr>
<tr class="tr3">
<td><input name="subitems[0].attribute" value="卫星"/></td>
<td><input name="subitems[0].predicate" value="="/></td>
<td ><input  name="subitems[0].value" /></td>
<td align="center"> </td>
</tr>
<tr class="tr3">
<td><input name="subitems[1].attribute" value="纬度"/></td>
<td><input name="subitems[1].predicate" value="&gt"/></td>
<td ><input type="text" name="subitems[1].value"/></td>
<td align="center"></td>
</tr>
<tr class="tr3">
<td><input name="subitems[2].attribute" value="纬度"/></td>
<td><input name="subitems[2].predicate" value="&lt"/></td>
<td ><input type="text" name="subitems[2].value"/></td>
<td align="center"></td>
</tr>
<tr class="tr3">
<td><input name="subitems[3].attribute" value="纬度"/></td>
<td><input name="subitems[3].predicate" value="&gt"/></td>
<td ><input type="text" name="subitems[3].value"/></td>
<td align="center"></td>
</tr>
<tr class="tr3">
<td><input name="subitems[4].attribute" value="经度"/></td>
<td><input name="subitems[4].predicate" value="&gt"/></td>
<td ><input type="text" name="subitems[4].value"/></td>
<td align="center"> </td>
</tr>
<tr class="tr3">
<td><input name="subitems[5].attribute" value="经度"/></td>
<td><input name="subitems[5].predicate" value="&lt"/></td>
<td ><input type="text" name="subitems[5].value"/></td>
<td align="center"></td>
</tr>
<tr>
<td><input type="submit" value="添加"/></td>
</tr>
</table>
</form>


代码如上,每一行提交的是一个对象,每一行的每个单元提交这个对象的一个属性,如何用struts2中的iterator标签实现,这样我就不用写那么多<tr>和<td>了。

11 个解决方案

#1


你首先的从后台List出结果集,然后在页面展现
<s:iterator value="list" id="a">
  <tr class="tr2">
    <td style="width: 20%" align="center">
      <s:property value='a.属性名称'/>
     </td>
    <td style="width: 20%" align="center">
      <s:property value='a.谓词'/>
     </td>
     <td style="width: 20%" align="center">
        <s:property value='a.属性值'/>
      </td>
     <td style="width: 20%" align="center">

      </td>
    </tr>
</s:iterator>

#2


<s:iterator value="list" id="result">
<tr class="tr3">
<td><input name="subitems[0].attribute" value =<property value="#result.??"/>/></td>
<td><input name="subitems[0].predicate" value="="/></td>
<td ><input  name="subitems[0].value" /></td>
<td align="center">    </td>
</tr>
</s:iterator>

如红色 那样 替换就OK乐

#3


引用 2 楼 a312983516 的回复:
<s:iterator value="list" id="result">
<tr class="tr3">
<td><input name="subitems[0].attribute" value=<property value="#result.??"/>/></td>
<td><input name="subitems[0].predicate" value="="/></td>
……


试过这样做,但是这样写的话页面上没有输入框,因为一开始list是空的?

#4


引用 1 楼 fetianlong 的回复:
你首先的从后台List出结果集,然后在页面展现
<s:iterator value="list" id="a">
  <tr class="tr2">
    <td style="width: 20%" align="center">
      <s:property value='a.属性名称'/>
     </td>
    <td style="width: 20%" a……


我现在是要提交数据啊,不是要展现出来

#5


我自己的看法:一般情况下,一个form对应一个action,一个action对应一个submit,你现在只有一个action,但有多个submit,所以我感觉有iterator标签难以实现。我是没有遇到过这种情况,如果lz解决了,记得给大家分享一下。

#6


在value里面使用OGNL表达式创建一个list  然后迭代就可以了 

#7


写一个配置文件
AddSub-conversion.properties内容
Element_xxxList=bean
(bean为list中对象的完整名称)

此文件放AddSub.java同一目录下

#8


引用 6 楼 jar_120 的回复:
在value里面使用OGNL表达式创建一个list  然后迭代就可以了


list在我的action里已经定义好了,action执行的时候list被放在valuestack里可以直接用,现在问题在于如何迭代,既把各个输入框显示出来,又让各个输入框与相应的属性对应起来。

#9



<s:form action="update" method="post" > 
<s:iterator value="peopleList" status="stat"> 
<s:hidden 
name="peopleList[%{#stat.index}].id" 
value="%{peopleList[#stat.index].id}"/> 
<s:textfield label="Name" 
name="peopleList[%{#stat.index}].name" 
value="%{peopleList[#stat.index].name}"/> 
<s:textfield label="Age" 
name="peopleList[%{#stat.index}].age" 
value="%{peopleList[#stat.index].age}" /> 
<s:textfield label="Height" 
name="peopleList[%{#stat.index}].height" 
value="%{peopleList[#stat.index].height}"/> 
<br/> 
s:iterator> 
<s:submit value="Update"/> 
s:form> 

我在网上搜索找到了上面的一段代码,但是用这种方法页面上是不现实输入框的,这个该怎么改呢

#10


引用 9 楼 dulongfirst 的回复:
HTML code

<s:form action="update" method="post" > 
<s:iterator value="peopleList" status="stat"> 
<s:hidden 
name="peopleList[%{#stat.index}].id" 
value="%{peopleList[#stat.index].id}"/> 
<s:textfi……


你换成普通的html标签试试,也就是<input type="text" />这种。name和value取迭代列表元素的属性值。

#11


我也有类似的问题!

#1


你首先的从后台List出结果集,然后在页面展现
<s:iterator value="list" id="a">
  <tr class="tr2">
    <td style="width: 20%" align="center">
      <s:property value='a.属性名称'/>
     </td>
    <td style="width: 20%" align="center">
      <s:property value='a.谓词'/>
     </td>
     <td style="width: 20%" align="center">
        <s:property value='a.属性值'/>
      </td>
     <td style="width: 20%" align="center">

      </td>
    </tr>
</s:iterator>

#2


<s:iterator value="list" id="result">
<tr class="tr3">
<td><input name="subitems[0].attribute" value =<property value="#result.??"/>/></td>
<td><input name="subitems[0].predicate" value="="/></td>
<td ><input  name="subitems[0].value" /></td>
<td align="center">    </td>
</tr>
</s:iterator>

如红色 那样 替换就OK乐

#3


引用 2 楼 a312983516 的回复:
<s:iterator value="list" id="result">
<tr class="tr3">
<td><input name="subitems[0].attribute" value=<property value="#result.??"/>/></td>
<td><input name="subitems[0].predicate" value="="/></td>
……


试过这样做,但是这样写的话页面上没有输入框,因为一开始list是空的?

#4


引用 1 楼 fetianlong 的回复:
你首先的从后台List出结果集,然后在页面展现
<s:iterator value="list" id="a">
  <tr class="tr2">
    <td style="width: 20%" align="center">
      <s:property value='a.属性名称'/>
     </td>
    <td style="width: 20%" a……


我现在是要提交数据啊,不是要展现出来

#5


我自己的看法:一般情况下,一个form对应一个action,一个action对应一个submit,你现在只有一个action,但有多个submit,所以我感觉有iterator标签难以实现。我是没有遇到过这种情况,如果lz解决了,记得给大家分享一下。

#6


在value里面使用OGNL表达式创建一个list  然后迭代就可以了 

#7


写一个配置文件
AddSub-conversion.properties内容
Element_xxxList=bean
(bean为list中对象的完整名称)

此文件放AddSub.java同一目录下

#8


引用 6 楼 jar_120 的回复:
在value里面使用OGNL表达式创建一个list  然后迭代就可以了


list在我的action里已经定义好了,action执行的时候list被放在valuestack里可以直接用,现在问题在于如何迭代,既把各个输入框显示出来,又让各个输入框与相应的属性对应起来。

#9



<s:form action="update" method="post" > 
<s:iterator value="peopleList" status="stat"> 
<s:hidden 
name="peopleList[%{#stat.index}].id" 
value="%{peopleList[#stat.index].id}"/> 
<s:textfield label="Name" 
name="peopleList[%{#stat.index}].name" 
value="%{peopleList[#stat.index].name}"/> 
<s:textfield label="Age" 
name="peopleList[%{#stat.index}].age" 
value="%{peopleList[#stat.index].age}" /> 
<s:textfield label="Height" 
name="peopleList[%{#stat.index}].height" 
value="%{peopleList[#stat.index].height}"/> 
<br/> 
s:iterator> 
<s:submit value="Update"/> 
s:form> 

我在网上搜索找到了上面的一段代码,但是用这种方法页面上是不现实输入框的,这个该怎么改呢

#10


引用 9 楼 dulongfirst 的回复:
HTML code

<s:form action="update" method="post" > 
<s:iterator value="peopleList" status="stat"> 
<s:hidden 
name="peopleList[%{#stat.index}].id" 
value="%{peopleList[#stat.index].id}"/> 
<s:textfi……


你换成普通的html标签试试,也就是<input type="text" />这种。name和value取迭代列表元素的属性值。

#11


我也有类似的问题!