Posted on 2007-04-11 10:40
HandSoft 阅读(6394)
评论(0) 编辑 收藏 所属分类:
开源学习
在Strut中,实现table中复制一行的功能
line[j]是要复制的一行,Action中可以获取到要复制的行的ID.
因为line[j]中有很多属性,要是一个一个的属性去get,然后set的话,代码量会
很大,而且会出现很多冗余代码。
这是我要复制出来的一行
if (j == rowId && !line[j].getNewRecord()) {
rowList.add(line[j]);
//将这一行全部复制
}
现在要使得其中的某几个属性复制出来为空
则需要一个一个的set,get.
if (j == rowId && !line[j].getNewRecord()) {
CreateDeliveryLineRow cdlr = new CreateDeliveryLineRow ();
if(line[j].getMfgLot() != null){
cdlr.setMfgLot = null;
}
。。。。。。
rowList.add(cdlr);
//将这一行全部复制
}
以下是比较好的解决方案:
利用apache的common类中的BeanUtils来实现对象属性的复制
if (j == rowId && !line[j].getNewRecord()) {
CreateDeliveryLineRow row = new CreateDeliveryLineRow();
BeanUtils.copyProperties(row,line[j]); //复制出对象line[j],将其属性赋予row
row.setQuantity(null); //在row中轻松的实现对某几个属性的控制
row.setMfgLot(null);
row.setMiniQuantity(null);
row.setBoxQuantity(null);
rowList.add(row);
//rowList.add(cdr);
}
===================================================
CreateDeliveryForm getForm = (CreateDeliveryForm) form;
。。。。。。
CreateDeliveryLineRow[] line = getForm.getLine();
if (line != null && line instanceof CreateDeliveryLineRow[]) {
int size = line.length;
for (int j = 0; j < size; j++) {
if (!line[j].getNewRecord() && !line[j+1].getNewRecord()) {
if (line[j].getBoxQuantity() == 0L) {
line[j].setBoxQuantity(null);
}
if (line[j].getMiniQuantity() == 0L) {
line[j].setMiniQuantity(null);
}
if (line[j].getQuantity() == 0D) {
line[j].setQuantity(null);
}
rowList.add(line[j]);
}
if (j == rowId && !line[j].getNewRecord()) {
CreateDeliveryLineRow row = new CreateDeliveryLineRow();
BeanUtils.copyProperties(row,line[j]);
row.setQuantity(null);
row.setMfgLot(null);
row.setMiniQuantity(null);
row.setBoxQuantity(null);
rowList.add(row);
//rowList.add(cdr);
}
}
}
。。。。。。
request.setAttribute("results", rowList);