您的位置:首页 > 编程语言 > Java开发

Struts中Action里对Form的运用理解

2010-08-19 18:23 381 查看
public ActionForward custDetail(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String forward = "custDetail";
CustInforForm custInforForm = (CustInforForm) form;
try {
CustomerInfor customerInfor = custInforForm.getCustomerInfor();
if (!customerInfor.getCustomerId().equals("")) {
custInforForm.setCustomerInfor(customerInfor
.get(customerInfor.getCustomerId()));
custInforForm.setCheckboxSelect(customerInfor.getCustomerXxlx()
.split(","));//这句中customerInfor.getCustomerXxlx为空
}
} catch (ObjectPersistentException e) {
logger.error(e.getMessage(), e);
ActionErrors errors = new ActionErrors();
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionError("error",
"查询失败:" + e.getMessage()));
saveErrors(request, errors);
}
return mapping.findForward(forward);
}

原因:CustomerInfor customerInfor = custInforForm.getCustomerInfor()会生成一个对象,并将对象地址赋给CustomerInfor类中private接口类型变量(假设为A),同时将A作为函数返回值赋给customerInfor,此时A和customerInfor同时指向这个对象。
custInforForm.setCustomerInfor(customerInfor.get(customerInfor.getCustomerId()));生成另一个对象,这个对象里各属性都有值,并将对象地址作为参数赋给Form里面的私有变量A,此时customerInfor仍然指向原来的对象,所以此时customerInfor里面没有CustomerXxlx的值

根据这个原理上面代码customerInfor.getCustomerXxlx()应该改为custInforForm.getCustomerInfor().getCustomerXxlx();才能正常运行。或者把有属性值的对象重新赋给customerInfor.如下代码:

代码

public ActionForward custDetail(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String forward = "custDetail";
CustInforForm custInforForm = (CustInforForm) form;
try {
CustomerInfor customerInfor = custInforForm.getCustomerInfor();
if (!customerInfor.getCustomerId().equals("")) {
customerInfor = customerInfor.get(customerInfor.getCustomerId());
custInforForm.setCustomerInfor(customerInfor);
custInforForm.setCheckboxSelect(customerInfor.getCustomerXxlx().split(","));
}
// 在这里进行一条记录的查询操作!
} catch (ObjectPersistentException e) {
logger.error(e.getMessage(), e);
ActionErrors errors = new ActionErrors();
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionError("error",
"查询失败:" + e.getMessage()));
saveErrors(request, errors);
}
return mapping.findForward(forward);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: