我有一个表格可以显示很长的项目列表,我想知道如何编辑字段并提交表单来更新它们?
<form name="edit" method="POST" action="edit">
<table border="4">
<tbody>
<c:forEach items="${basket.items}" var="item">
<tr>
<td>
<input name="item.id" value="${item.id}"/>
</td>
<td>
<input label="Price" value="${item.product.price}"/>
<br/>
</td>
</tr>
</c:forEach>
</tbody>
</table>
this is a new one
<input id="edit" type="submit" name="edit" value="Edit"/>
</form>
答案 0 :(得分:2)
你正在使用Struts2,使用JSTL和EL而不是Struts标签和OGNL ......是否有一个特殊的原因迫使你放弃大部分框架机制?
那就是说,你的输入无效(没有指定类型),HTML中的“这是一个新的”句子似乎表示愿意插入一个新行,而不是编辑现有的entres。您的描述和代码似乎要求两个不同的东西...插入一个新的,只需调用另一个操作方法(或另一个操作),称为“添加”而不是“编辑”,发送一个单独的元素和将其添加到集合中。这里不需要使用AJAX ......
如果相反,问题确实是:
我如何编辑字段并提交表单以更新它们?
这是方式:
<s:form method="POST" action="edit">
<table border="4">
<tbody>
<s:iterator value="basket.items" var="item" status="ctr">
<tr>
<td>
<s:textfield name="item[%{#ctr.index}].id" />
</td>
<td>
<s:textfield name="item[%{#ctr.index}].product.price" />
</td>
</tr>
</s:iterator>
</tbody>
</table>
<s:submit value="Edit"/>
</form>
答案 1 :(得分:1)
我建议您使用jquery进行AJAX调用以更新新的调用。然后在成功处理程序中,您可以将新行附加到现有表。在此之前,您需要为表格提供适当的ID,以便更容易使用JQUERY。
var newLine = document.createElement("tr");
var cellName = document.createElement("td");
$(cellName).text("itemId");
$(newLine).append(cellName);
// similarly create other td's
$("#modelTable").append(newLine);// replace modelTable by the id of your table