在我最近的项目中,我使用 jQuery Grid,当用户单击按钮时生成动态网格。
在服务器端数据是通过使用Session
.
首先,我得到Session
对象并将该对象转换为gatepassDTO
.
然后我正在创建一个本地对象,并将属性从旧对象复制到新对象并放入Map
.
之后,我正在创建futureDTO
对象并将属性从 复制gatepassDTO
到futureDTO
。如果我更改其中的任何内容,futureDTO
则会影响包含对象的地图。
为什么会发生这种情况?
public String addOnemoreGatepass() {
log.info("----------------Entering method addOnemoreGatepass------------");
try {
Object map = session.get("gatepassMap");
GatepassDTO gatepassDTO = new GatepassDTO();
gatepassDTO=(GatepassDTO)session.get("gatepassDTO");
if(map!=null){
//gatepassMap=Collections.synchronizedMap((HashMap)map);
}
if(truckNo!=null){
gatepassDTO.setTruckNo(truckNo);
}
if(gpDirect!=null){
GatepassDTO tempDTO=new GatepassDTO();
copyProperty(tempDTO,gatepassDTO);
/* HashMap<String,GatepassDTO> maps=null;
if(gatepassNo.equals("1")){
maps=new HashMap<String, GatepassDTO>();
local.saveMap(getRequest().getSession().getId(),maps);
}
maps=local.loadMap(getRequest().getSession().getId());
maps.put(gatepassNo, tempDTO);*/
putCachedObject("SINGLEGATEPASSCACHE", gatepassNo, tempDTO);
gatepassMap.put(gatepassNo, tempDTO);
//local.saveMap(getRequest().getSession().getId(),maps);
session.put("documentType", documentType);
session.put("gatepassMap", gatepassMap);
return SUCCESS;
}
else{
GatepassDTO tempDTO=new GatepassDTO();
copyProperty(tempDTO,gatepassDTO);
/*HashMap<String,GatepassDTO> maps=null;
if(gatepassNo.equals("1")){
maps=new HashMap<String, GatepassDTO>();
local.saveMap(getRequest().getSession().getId(),maps);
}
maps=local.loadMap(getRequest().getSession().getId());
maps.put(gatepassNo, tempDTO);*/
putCachedObject("SINGLEGATEPASSCACHE", gatepassNo, tempDTO);
gatepassMap.put(gatepassNo, tempDTO);
//local.saveMap(getRequest().getSession().getId(),maps);
session.put("documentType", documentType);
session.put("gatepassMap", gatepassMap);
}
GatepassDTO futureDTO=new GatepassDTO();
copyProperty(futureDTO,gatepassDTO);
DocumentDTO documentDTO =futureDTO.getDocumentDTO();
List<GatepassGoodsDTO> goodsList=documentDTO.getGatepassGoodsList();
int i=0;
for(GatepassGoodsDTO goodsDTO:goodsList){
if(goodsDTO.getRemovalType()!=null&&(goodsDTO.getRemovalType().equals("Quantity")||goodsDTO.getRemovalType().equals("Weight"))){
goodsDTO.setPrevRemovalType(goodsDTO.getRemovalType());
goodsDTO.setPrevGPQuantity((goodsDTO.getRemovalQuantity()!=null?goodsDTO.getRemovalQuantity():0));
goodsDTO.setPrevGPWeight((goodsDTO.getRemovalWeight()!=null?goodsDTO.getRemovalWeight():0));
goodsDTO.setBalanceQuantity(goodsDTO.getBalanceQuantity()-goodsDTO.getRemovalQuantity());
goodsDTO.setBalanceWeight(goodsDTO.getBalanceWeight()-goodsDTO.getRemovalWeight());
goodsDTO.getVehicleDetailsList().clear();
goodsDTO.setVehicleDetailsList(goodsDTO.getDeletedVehicleDetailsList());
goodsDTO.setDeletedVehicleDetailsList(new ArrayList<GatepassVehicleDTO>());
goodsDTO.setRemovalType("");
goodsDTO.setRemovalQuantity(0);
goodsList.set(i, goodsDTO);}
else{
goodsList.set(i, goodsDTO);
}
i++;
}
documentDTO.setGatepassGoodsList(goodsList);
documentDTO.setContainerList(deletedContainerModel);
futureDTO.setDocumentDTO(documentDTO);
futureDTO.setTruckModel(new ArrayList<GatepassTruckDTO>());
session.put("gatepassDTO",futureDTO);
// setDocumentModel(null);
// setGridModel(null);
deletedVehicleModel.clear();
deletedContainerModel.clear();
// manifestNo=null;
} catch (Exception e) {
log.info(e.getMessage());
}
log.info("---------------Ending method addOnemoreGatepass----------------");
return SUCCESS;
}
private void copyProperty(GatepassDTO tempDTO,GatepassDTO gatepassDTO){`enter code here`
tempDTO.setDocumentDTO(gatepassDTO.getDocumentDTO());
tempDTO.setTruckNo(gatepassDTO.getTruckNo());
}
为什么会出现这个问题?这是核心 Java 问题还是 Struts2 JSON 问题?