见鬼,上周正常的代码,今天不行了
目的是批量更新一些信息
一个编辑页面包含多行数据
每行点击弹出窗口编辑相关信息
关闭弹出窗口后统一保存或放弃修改
updateList 方法的目的是保证值为最后修改的
上周测试的时候明明运行正常的
今天再运行时却老是 remove 不了旧的值
why?
package com.tt.bms.webapp.dwr;import java.util.ArrayList;
import java.util.List;import com.tt.Constants;
import com.tt.bms.webapp.dwr.util.Context;
import com.tt.bms.webapp.dwr.vo.MaintainAdviceVo;public class MaintainadviceDwr { /**
 * 将维修建议弹出窗口的值保存至 session 的 List 中
 * 
 * @param vo
 * @return
 */
public void saveMaintainadvice(MaintainAdviceVo vo) {
if (vo != null) {
System.out.println(vo.getBridgeId() + "\t" + vo.getDescription()
+ "\t" + vo.getDiseasephoto() + "\t" + vo.getDiseasetype()
+ "\t" + vo.getPartscode() + "\t" + vo.getTiming());
List<MaintainAdviceVo> maintainadvices = (List<MaintainAdviceVo>) Context
.getSession().getAttribute(
Constants.MAINTAIN_ADVICE_LIST_NAME);
if (maintainadvices == null) {
maintainadvices = new ArrayList<MaintainAdviceVo>();
maintainadvices.add(vo);
} else {
maintainadvices = updateList(maintainadvices, vo);
}
// 更新List
Context.getSession().setAttribute(
Constants.MAINTAIN_ADVICE_LIST_NAME, maintainadvices);
System.out.println("============================================");
for (MaintainAdviceVo obj : maintainadvices) {
System.out.println(obj.getBridgeId() + "\t"
+ obj.getPartscode());
}
System.out.println("============================================");
}
} /**
 * 更新List,如果 List 中有 bridgeId 及 partscode 与 obj 的 bridgeId 及 partscode
 * 一致的元素,则将其删除,同时将 obj 加至 List 中
 * 
 * @param maintainadvices
 *            需更新的 List
 * @param obj
 *            比较对象
 * @return
 */
private List<MaintainAdviceVo> updateList(List<MaintainAdviceVo> maintainadvices, MaintainAdviceVo obj) {
List<MaintainAdviceVo> list = maintainadvices;
if (maintainadvices != null && maintainadvices.size() > 0 && obj != null) {
for (MaintainAdviceVo vo : maintainadvices) {
if (vo.getBridgeId().equals(obj.getBridgeId())&& vo.getPartscode().equals(obj.getPartscode())) {
list.remove(vo);
}
}
list.add(obj);
}
return list;
}
}

解决方案 »

  1.   

    可能是List<MaintainAdviceVo> list = maintainadvices;
    问题,明天上班再看看
    还有可能是boolean remove(Object o)不能正确保证删除
      

  2.   

    List<MaintainAdviceVo> list = maintainadvices;
    这个重新定义了一个list , list.remove(vo) 是移除新的list中的内容,而不是对原有的maintainadvices对象进行操作;
      

  3.   


    确实是
    改用 remove(index);
    就没事了