我在JSP中有一个表。在那里我有3个输入文本的值,当我点击提交然后我再次获得JSP表,其中一行多了三行输入结果。
index.jsp这个jsp是我得到表的值和总和然后我提交给servlet
<form method="post" action="Servlet">
<table id="sum_table">
<tbody>
<tr>
<td class="numtotal">TOTAL</td>
<td class="num">1</td><td class="num">2</td><td class="num">3</td><td class="num">
</tr>
<tr>
<td><input type="text" value="${bean.sum}"maxlength=3 readonly="readonly"></TD>
<c:forEach items="${bean.values}" var="value" varStatus="loop">
<c:if test="${not loop.first and loop.index % 3 == 0}">
</tr><tr>
</c:if>
<td><input type="text" name="value" value="${value}" maxlength="2"/></td>
</c:forEach>
</tr>
</tbody>
</table>
<p><input type="submit" id="submit"/></p>
<p><input type="button" id="btnAdd" value="+"/></p>
</form>
Servlet.java这里我设置值和值的总和并发送到索引jsp
Bean bean = new Bean();
String[] values= request.getParameterValues("value");
if (values == null) {
values= new String[3];
for(int i=0; i< 3;i++) {
values[i]= "0";
}
}
Integer sum= 0;
for(int i = 0; i < values.length; i++)
{
bean.setSum(sum = sum + Integer.valueOf(values[i]));
bean.setValues(values);
}
request.setAttribute("bean", bean);
request.getRequestDispatcher("/index.jsp").forward(request, response);
这是我的bean类:
public class Bean {
String[] values;
Integer sum;
public Integer getSum() {return sum;}
public void setSum(Integer integer) {this.sum = integer;}
public String[] getValues() {return values;}
public void setValues(String[] valores) {this.values= values;}
}
一行正常,例如:
TOTAL | VALUE1 | VALUE2 | VALUE3
10 | 2 | 3 | 5
但是如果我做一个增加此行的按钮来做另一个总和,那么还有三个值可能吗?
答案 0 :(得分:0)
首先,如果要显示三行值的多行,则应在其自己的行上显示总计。接下来,处理表单中的多个提交按钮并不容易,因为您必须测试单击按钮的标签是什么,一旦进入i18n就会导致复杂的操作。您应该考虑使用复选框和单个提交按钮。
此外,循环之后,循环中有bean.setValues(values)
。
无论如何,<input type="button" .../>
不提交任何内容,只能触发javascript。
现在我想你找到了一种在servlet中确定要添加新行的方法(复选框或2个提交按钮)。您可以将bean.setValues(values)
(离开循环......)更改为:
if (needAddRow) {
String[] val2 = new String[values.length + 3];
val2[0] = 0;
val2[1] = 0;
val2[2] = 0;
for (int i=0; i< values.length; i++) {
val[i+3] = values[i];
}
bean.setValues(val2);
}
else {
bean.setValues(values);
}
小心:未经测试......