在页面检验数据时,调用document.getElementsByName(String name)函数,这个方法可返回带有指定名称的对象的集合。
在后台取数据时,调用request.getParameterValues(String name)函数,这个函数是获得数组变量如checkbox类(名字相同,但值有多个)的数据。这也是为什么在上一篇中,每列的name相同的原因。只有name相同,才能把每列的信息作为一个数组来接收,而id的不同,是为了在页面的其他操作(检验金额等)中,以id区分同一列不同行的信息。
这里补充一点name和id的区别:
在html中:name指的是用户名称,ID指的是用户注册是系统自动分配给用户的一个序列号。
name是用来提交数据的,提供给表单用,可以重复;
id则针对文档操作时候用,不能重复。
所以页面操作用不同的id,提交数据用name按组传递。
Jsp页面:
Javascript部分:
function save() {
var equipnameList = document.getElementsByName("peoEquipname");//取出产品名称一列的数据
var delidateList = document.getElementsByName("peoDelidate");//取出交货日期一列的数据
var numList = document.getElementsByName("peoNum");//取出数量一列的数据
var tag = 0;//置标志位为0,标志位为0,可以提交数据,标志位为1,不能提交数据
var i=0;
for(i=0;i<equipnameList.length;i++){//循环检查每一行的产品名称,交货日期,数量不能不空(品牌,规格型号,询价成本可以为空)
if(equipnameList[i].value==""){
i++;//因为数组从第0个开始,我们看表格从第1行开始,所以循环标志在此自增,行号显示正常
tag=1;//置标志位为1,不能提交数据
confirm("第"+i+"行的产品名称不能为空");//给出提示,循环标志与行号统一
break;
}
if(delidateList[i].value==""){
i++;
tag=1;
confirm("第"+i+"行的交货日期不能为空");
break;
}
if(numList[i].value==""){
i++;
tag=1;
confirm("第"+i+"行的产品数量称不能为空");
break;
}
}
if(tag==1){
return false;//结束函数,不在提交数据
}
document.form.action = "${pageContext.request.contextPath}/store.do?method=add";
document.form.method = "post";
document.form.submit();
}
部分静态代码
<button type="button" onclick="javaSript:save();" >保存</button>
Action类部分代码
if(method.equals("add")){//增加多条设备下单条目
Utils utils = new Utils();//Utils类可将字符串转化为Date类对象
String[] equipnameList = request.getParameterValues("peoEquipname");//获取一组设备下单条目的产品名称
String[] brandList = request.getParameterValues("peoBrand");//获取一组设备下单条目的品牌
String[] modelList = request.getParameterValues("peoModel");//获取一组设备下单条目的产品型号
String[] delidateList = request.getParameterValues("peoDelidate");//获取一组设备下单条目的交货日期
String[] numList = request.getParameterValues("peoNum");//获取一组设备下单条目的数量
String[] inqucostList = request.getParameterValues("peoInqucost");//获取一组设备下单条目的询价成本
for(int num=0;num<inqucostList.length;num++){
if(inqucostList[num].isEmpty()){
inqucostList[num]="0";//如果金额项有空项,置为0,防止转化为Double类对象时报错
}
}
List<TProEquiporderNew> equiporderNewList = new ArrayList<TProEquiporderNew>();//TProEquiporderNew类为设备下单条目类
TProEquiporderNew equiporderNew;
for(int i=0;i<equipnameList.length;i++){//循环取出每行数据,放入多个设备下单条目类
equiporderNew = new TProEquiporderNew();
equiporderNew.setPeoEquipname(equipnameList[i]);
equiporderNew.setPeoBrand(brandList[i]);
equiporderNew.setPeoModel(modelList[i]);
equiporderNew.setPeoDelidate(utils.StrConvertDate(delidateList[i]));
equiporderNew.setPeoNum(Long.parseLong(numList[i]));
equiporderNew.setPeoInqucost(Double.parseDouble(inqucostList[i]));
String peoComname = brandList[i]+equipnameList[i]+modelList[i];//peoComname为组合项(品牌+产品名称+产品型号)
equiporderNew.setPeoComname(peoComname);
equiporderNewList.add(equiporderNew);//将多个设备下单条目类插入一个List中
}
proEquiporderNewManager.addMoreProEquiporderNew(equiporderNewList);
return mapping.findForward("list");
}
Manager类部分代码
public void addMoreProEquiporderNew(List<TProEquiporderNew> list) {//增加多条设备下单条目
for(int i=0;i<list.size();i++){
TProEquiporderNew tproEquiporderNew = (TProEquiporderNew)list.get(i);
proEquiporderNewDao.addOrModiProEquiporderNew(tproEquiporderNew);
}
}
dao类部分代码
public void addOrModiProEquiporderNew(TProEquiporderNew tproEquiporderNew) {//增加或修改一条设备下单条目
this.getHibernateTemplate().saveOrUpdate(tproEquiporderNew);
}
注:Utils类
public class Utils {
public Date StrConvertDate(String str) throws ParseException {
Date d = null;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String strTemp = StringUtils.defaultIfEmpty(str, "");
if (!strTemp.equals("")) {
d = format.parse(str);
}
return d;
}
}

浙公网安备 33010602011771号